Linux: Copiando Apenas Pastas e Subpastas sem os Arquivos

Obs.: Clique aqui para ir para nosso outro post onde ensinamos a fazer a mesma coisa mas utilizamos xargs ao inves de -exec

Às vezes nos deparamos com a necessidade de copiar psatas e suas pastas filhas de um local para outro, mas sem levar nenhum arquivo, apenas a estrutura da pasta vazia de arquivos.

Podemos utilizar para isso o comando find.

Usando o comando find

Tenho dentro da minha pasta home(/home/elder/) uma pasta chamada pasta01 com o seguinte conteúdo:

elder@server01:~$ tree pastas01/
pastas01/
├── documentos
│   ├── contratos
│   │   ├── contratos1.txt
│   │   ├── contratos2.txt
│   │   ├── contratos3.txt
│   │   ├── contratos4.txt
│   │   ├── contratos5.txt
│   │   ├── contratos6.txt
│   │   ├── contratos7.txt
│   │   └── contratos8.txt
│   ├── docs1.txt
│   ├── docs2.txt
│   ├── docs3.txt
│   ├── docs4.txt
│   ├── docs5.txt
│   ├── docs6.txt
│   ├── docs7.txt
│   ├── docs8.txt
│   └── planinhas
└── imagens
    ├── arquivos_antigos
    ├── filmes
    │   ├── acao
    │   │   ├── acao1.txt
    │   │   ├── acao2.txt
    │   │   └── acao3.txt
    │   ├── filmes1.txt
    │   ├── filmes2.txt
    │   ├── filmes3.txt
    │   ├── suspense
    │   └── terror
    ├── images1.txt
    ├── images2.txt
    ├── images3.txt
    ├── images4.txt
    ├── images5.txt
    ├── images6.txt
    ├── images7.txt
    └── images8.txt

9 directories, 30 files

Veja que temos 9 diretórios(pastas) e 30 arquivos.  Mas desejamos copiar apenas as pastas para dentro do diretório /home/elder/disco02.

Vamos usar fazer usando find:

tanto o diretório pasta01 quando o disco02 estão dentro da minha pasta home. Então, vamos entrar na pasta home do usuário, para isso digitamos apenas “cd” e seremos levados para nossa pasta home(em meu caso: /home/elder).

elder@server01:/etc$ cd

Execute o comando “find pastas01 -type d -exec mkdir disco02/{} \;“. Já já explicaremos como ele funciona.

elder@server01:~$ find pastas01 -type d  -exec mkdir disco02/{}  \;

Verificando o resultado

elder@server01:~$ tree  disco02/ 
disco02/
└── pastas01
    ├── documentos
    │   ├── contratos
    │   └── planinhas
    └── imagens
        ├── arquivos_antigos
        └── filmes
            ├── acao
            ├── suspense
            └── terror

10 directories, 0 files

 

Entendendo  o Comando Usando

Usamos o comando abaixo. Ele parece um pouco confuso para entender, mas não é.

find pastas01 -type d -exec mkdir disco02/{}   \;

Vamos quebrar o comando para estudarmos ele por partes

  • find pastas01 : “Find” significa encontrar. Pronunciá-se faind. Encontre(find) todo o conteúdo que está dentro de pastas01.
  • -type d: “type” significa tipo e “d” vem de diretório ou pasta.  Então o comando diz: Encontre(find) somente pastas(type d) que estão dentro de pastas01.
  • -exec : Execute um comando.
  • mkdir disco02/{}: mkdir é o comando que usamos para criar pastas. O {} ao final simboliza a resposta encontrada por “find -type d”. Essa resposta é passada para -exec.  Então nosso comando diz: execute(-exec) o comando criar pastas(mkdir) e crie dentro de disco02 pastas com a mesma estrutura nome das encontradas pelo comando find {}.
  • \; A barra e o ponto e vírgula significa final do comando. Ou seja: encerre o comando aqui.

 

Por curiosidade, execute apenas “find pasta01 -type d” e veja o resultado.

elder@server01:~$ find pastas01/  -type d
pastas01/
pastas01/documentos
pastas01/documentos/contratos
pastas01/documentos/planinhas
pastas01/imagens
pastas01/imagens/arquivos_antigos
pastas01/imagens/filmes
pastas01/imagens/filmes/suspense
pastas01/imagens/filmes/acao
pastas01/imagens/filmes/terro

Se quiséssemos apenas arquivos usaríamos “-type f” ao invés de “-type d”. a letra f aqui vem de file(arquivo).

Conclusão

Esse comando é bem útil. Temos uma série de artigos falando sobre essa ferramenta em nosso site. Clique aqui ou pesquise em nosso site por “find”.

 

 

Leitor voraz e um dos administradores do GNU/Linux Brasil no Whatsapp, facebook, youtube e nesse dito site: www.gnulinuxbrasil.com.br

One Comment to “Linux: Copiando Apenas Pastas e Subpastas sem os Arquivos”

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *