AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 543195
Accepted
havakok
havakok
Asked: 2019-09-24 03:01:04 +0800 CST2019-09-24 03:01:04 +0800 CST 2019-09-24 03:01:04 +0800 CST

Crie as mesmas subpastas em outra pasta

  • 772

Eu tenho um diretório foocom subdiretórios. Desejo criar os mesmos nomes de subdiretórios em outro diretório sem copiar seu conteúdo. Como eu faço isso?

Existe uma maneira de obter a lssaída como uma lista de expansão de chaves?

mkdir
  • 5 5 respostas
  • 3726 Views

5 respostas

  • Voted
  1. Kusalananda
    2019-09-24T03:23:41+08:002019-09-24T03:23:41+08:00

    Usando rsync:

    rsync -a --include='*/' --exclude='*' /some/path/dir/ dir
    

    Isso recriaria a estrutura de diretórios /some/path/dircomo dirno diretório atual, sem copiar nenhum arquivo.

    Qualquer diretório encontrado no caminho de origem seria criado no destino devido ao padrão de inclusão, mas qualquer outra coisa seria excluída. Como efeito colateral do uso de -a( --archive), você obterá os mesmos carimbos de data/hora em todos os subdiretórios no destino e na origem. Isso também funciona para criar estruturas de diretórios locais a partir de diretórios remotos (e vice-versa).

    • 24
  2. Best Answer
    Siva
    2019-09-24T03:15:58+08:002019-09-24T03:15:58+08:00

    Tente isso,

    cd /source/dir/path
    find . -type d -exec mkdir -p -- /destination/directory/{} \;
    
    • . -type dPara listar os diretórios no caminho atual recursivamente.
    • mkdir -p -- /destination/directory/{}criar diretório no destino.

    Isso se baseia em um findque suporta {}a expansão no meio de uma palavra de argumento.

    • 13
  3. roaima
    2019-09-24T03:16:33+08:002019-09-24T03:16:33+08:00

    Você pode usar findpara percorrer a estrutura de origem e chamar mkdircada diretório que encontrar.

    Este exemplo, usando find, copiará sua estrutura de diretórios de foopara/tmp/another/

    ( cd foo && find -type d -exec sh -c 'for d do mkdir -p "/tmp/another/$d"; done' sh {} + )
    

    O execloop cria o conjunto de diretórios abaixo foo, que é então passado para o mkdir. Se você não tiver uma versão findque entenda +você pode usar \;ao custo da eficiência. Substitua mkdirpor echo mkdirpara ver o que aconteceria sem realmente fazê-lo.

    • 8
  4. Jeff Schaller
    2019-09-24T11:57:19+08:002019-09-24T11:57:19+08:00

    Com o shell bash, você pode solicitar a expansão de todos os diretórios com a globstaropção:

    shopt -s globstar
    

    e copie os diretórios com um loop:

    for dir in **/
    do
      mkdir -p /path/to/dest/"$dir"
    done
    

    ... ou se você pensou que todos caberiam em uma chamada para mkdir:

    set -- **/
    mkdir -- "${@/#//path/to/dest/}"
    

    Essa é a sintaxe do array bash que diz: "pegue todos os elementos do $@array e substitua o início de cada um deles por /path/to/dest/.

    Não estou ciente de uma maneira de obter lsa saída diretamente como uma lista de expansão de chaves. Se você tentasse massagear a saída da **/expansão em uma expansão de contraventamento, você precisaria ter cuidado para:

    • escape de qualquer vírgula na saída
    • escapar de qualquer {ou ${sequência
    • certifique-se de que a string resultante não excedeu o espaço de argumento da linha de comando disponível

    Eu não recomendaria.

    • 4
  5. Jim L.
    2019-09-25T13:35:36+08:002019-09-25T13:35:36+08:00

    A pergunta é uma duplicata entre sites de https://superuser.com/questions/1389580/copy-directory-structure-only-at-year-end

    Esse tipo de tarefa é um caso de uso clássico para mtree:

    $ mkdir new-tree
    $ mtree -cp old-tree | mtree -tdUp new-tree
    .:      modification time (Tue Sep 24 14:27:07 2019, Tue Sep 24 16:34:57 2019, modified)
    ./bar missing (created)
    ./bar/bar2 missing (created)
    ./bar/bar2/bar3 missing (created)
    ./bar/bar2/bar3/bar4 missing (created)
    ./foo missing (created)
    ./foo/foo2 missing (created)
    ./foo/foo2/foo3 missing (created)
    

    O acima cria todos os diretórios em new-treeque estavam presentes em old-tree. mtreenão define carimbos de data e hora em diretórios recém-criados, portanto, a árvore resultante se parece com isso:

    $ find old-tree new-tree -ls
     20147  1 drwx--x---   4 jim   jim   5 Sep 24 14:27 old-tree
     20048  1 drwx--x---   3 jim   jim   4 Sep 24 14:27 old-tree/foo
     20363  1 -rw-------   1 jim   jim   0 Sep 24 14:27 old-tree/foo/file
     20073  1 drwx--x---   3 jim   jim   4 Sep 24 14:27 old-tree/foo/foo2
     20074  1 drwx--x---   2 jim   jim   3 Sep 24 14:27 old-tree/foo/foo2/foo3
     20365  1 -rw-------   1 jim   jim   0 Sep 24 14:27 old-tree/foo/foo2/foo3/file
     20364  1 -rw-------   1 jim   jim   0 Sep 24 14:27 old-tree/foo/foo2/file
     20051  1 drwx--x---   3 jim   jim   4 Sep 24 14:27 old-tree/bar
     20077  1 drwx--x---   3 jim   jim   4 Sep 24 14:27 old-tree/bar/bar2
     20368  1 -rw-------   1 jim   jim   0 Sep 24 14:27 old-tree/bar/bar2/file
     20078  1 drwx--x---   3 jim   jim   4 Sep 24 14:27 old-tree/bar/bar2/bar3
     20369  1 -rw-------   1 jim   jim   0 Sep 24 14:27 old-tree/bar/bar2/bar3/file
     20079  1 drwx--x---   2 jim   jim   3 Sep 24 14:27 old-tree/bar/bar2/bar3/bar4
     20370  1 -rw-------   1 jim   jim   0 Sep 24 14:27 old-tree/bar/bar2/bar3/bar4/file
     20366  1 -rw-------   1 jim   jim   0 Sep 24 14:27 old-tree/bar/file
     20362  1 -rw-------   1 jim   jim   0 Sep 24 14:27 old-tree/file
    134489  1 drwx--x---   4 jim   jim   4 Sep 24 16:34 new-tree
    134490  1 drwx--x---   3 jim   jim   3 Sep 24 16:34 new-tree/bar
    134491  1 drwx--x---   3 jim   jim   3 Sep 24 16:34 new-tree/bar/bar2
    134492  1 drwx--x---   3 jim   jim   3 Sep 24 16:34 new-tree/bar/bar2/bar3
    134493  1 drwx--x---   2 jim   jim   2 Sep 24 16:34 new-tree/bar/bar2/bar3/bar4
    134494  1 drwx--x---   3 jim   jim   3 Sep 24 16:34 new-tree/foo
    134495  1 drwx--x---   3 jim   jim   3 Sep 24 16:34 new-tree/foo/foo2
    134496  1 drwx--x---   2 jim   jim   2 Sep 24 16:34 new-tree/foo/foo2/foo3
    

    Se você preferir que os new-treetimestamps correspondam aos de old-tree, basta executar mtreenovamente. Como os diretórios já existem, mtreemodificará os carimbos de data e hora para corresponder à especificação de origem:

    $ mtree -cp old-tree | mtree -tdUp new-tree
    .:      modification time (Tue Sep 24 14:27:07 2019, Tue Sep 24 16:34:57 2019, modified)
    bar:    modification time (Tue Sep 24 14:27:07 2019, Tue Sep 24 16:34:57 2019, modified)
    bar/bar2: 
            modification time (Tue Sep 24 14:27:07 2019, Tue Sep 24 16:34:57 2019, modified)
    bar/bar2/bar3: 
            modification time (Tue Sep 24 14:27:07 2019, Tue Sep 24 16:34:57 2019, modified)
    bar/bar2/bar3/bar4: 
            modification time (Tue Sep 24 14:27:07 2019, Tue Sep 24 16:34:57 2019, modified)
    foo:    modification time (Tue Sep 24 14:27:07 2019, Tue Sep 24 16:34:57 2019, modified)
    foo/foo2: 
            modification time (Tue Sep 24 14:27:07 2019, Tue Sep 24 16:34:57 2019, modified)
    foo/foo2/foo3: 
            modification time (Tue Sep 24 14:27:07 2019, Tue Sep 24 16:34:57 2019, modified)
    $ find old-tree new-tree -ls
     20147  1 drwx--x---   4 jim   jim   5 Sep 24 14:27 old-tree
     20048  1 drwx--x---   3 jim   jim   4 Sep 24 14:27 old-tree/foo
     20363  1 -rw-------   1 jim   jim   0 Sep 24 14:27 old-tree/foo/file
     20073  1 drwx--x---   3 jim   jim   4 Sep 24 14:27 old-tree/foo/foo2
     20074  1 drwx--x---   2 jim   jim   3 Sep 24 14:27 old-tree/foo/foo2/foo3
     20365  1 -rw-------   1 jim   jim   0 Sep 24 14:27 old-tree/foo/foo2/foo3/file
     20364  1 -rw-------   1 jim   jim   0 Sep 24 14:27 old-tree/foo/foo2/file
     20051  1 drwx--x---   3 jim   jim   4 Sep 24 14:27 old-tree/bar
     20077  1 drwx--x---   3 jim   jim   4 Sep 24 14:27 old-tree/bar/bar2
     20368  1 -rw-------   1 jim   jim   0 Sep 24 14:27 old-tree/bar/bar2/file
     20078  1 drwx--x---   3 jim   jim   4 Sep 24 14:27 old-tree/bar/bar2/bar3
     20369  1 -rw-------   1 jim   jim   0 Sep 24 14:27 old-tree/bar/bar2/bar3/file
     20079  1 drwx--x---   2 jim   jim   3 Sep 24 14:27 old-tree/bar/bar2/bar3/bar4
     20370  1 -rw-------   1 jim   jim   0 Sep 24 14:27 old-tree/bar/bar2/bar3/bar4/file
     20366  1 -rw-------   1 jim   jim   0 Sep 24 14:27 old-tree/bar/file
     20362  1 -rw-------   1 jim   jim   0 Sep 24 14:27 old-tree/file
    134489  1 drwx--x---   4 jim   jim   4 Sep 24 14:27 new-tree
    134490  1 drwx--x---   3 jim   jim   3 Sep 24 14:27 new-tree/bar
    134491  1 drwx--x---   3 jim   jim   3 Sep 24 14:27 new-tree/bar/bar2
    134492  1 drwx--x---   3 jim   jim   3 Sep 24 14:27 new-tree/bar/bar2/bar3
    134493  1 drwx--x---   2 jim   jim   2 Sep 24 14:27 new-tree/bar/bar2/bar3/bar4
    134494  1 drwx--x---   3 jim   jim   3 Sep 24 14:27 new-tree/foo
    134495  1 drwx--x---   3 jim   jim   3 Sep 24 14:27 new-tree/foo/foo2
    134496  1 drwx--x---   2 jim   jim   2 Sep 24 14:27 new-tree/foo/foo2/foo3
    
    • 2

relate perguntas

  • Como criar vários diretórios no Ranger?

  • Criar arquivo em subdiretórios que não existem (../new_folder/new_folder/new_file.ext)

  • Comando "mkdir" único para criar um novo diretório e mudar para esse diretório ao mesmo tempo? [duplicado]

  • Existe uma diferença programática entre os diretórios criados com mktemp -d ou mkdir?

  • Como mover uma pasta para dentro dela?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve