Copie tipos de arquivos específicos enquanto mantém a estrutura de diretórios no Linux
Há algum tempo, aprendemos como copiar certos tipos de arquivos de um diretório para outro no Linux. Hoje faremos o mesmo, mas também preservaremos a estrutura de diretórios. Este breve tutorial explica como copiar tipos de arquivos específicos enquanto mantém a estrutura de diretórios no Linux. Aqui eu forneci duas maneiras diferentes de fazer isso. Basta escolher qualquer um que funcione para você.
Copie tipos de arquivos específicos enquanto mantém a estrutura de diretórios no Linux
Imagine este cenário.
Eu tenho um diretório chamado "Linux" com diferentes tipos de arquivos salvos em diferentes subdiretórios. Dê uma olhada na seguinte estrutura de diretórios:
$ tree Linux/
Linux/
├── dir1
│ ├── English
│ │ └── Kina - Can We Kiss Forever.mp3
│ ├── Instrumental
│ │ └── Chill Study Beats.mp3
│ └── Tamil
│ ├── Kannan Vanthu.mp3
│ └── yarenna.mp3
├── dir2
│ ├── file.docx
│ └── Raja Raja Chozan Naan.mp3
├── dir3
│ ├── Bamboo Flute - Meditation - Healing - Sleep - Zen.mp3
│ └── pic.jpg
└── dir4
├── Aaruyirae.mp3
└── video.mp4
7 directories, 10 files
Como você pode ver na estrutura de diretórios acima, o diretório Linux tem quatro subdiretórios, nomeadamente dir1, dir2, dir3 > e dir4. Os arquivos mp3 estão espalhados pelos quatro subdiretórios. Agora, quero copiar todos os arquivos mp3 para outro diretório chamado "ostechnix" e também quero manter a mesma estrutura de diretórios no diretório de destino.
Primeiro veremos como fazer isso usando o comando “find”.
Método 1 – usando os comandos “find” e “cp” ou “cpio”
Vá para o diretório de origem:
cd Linux/
E copie todos os tipos de arquivos mp3 usando o comando "find":
find . -name '*.mp3' -exec cp --parents \{\} ~/ostechnix \;
Vamos analisar o comando acima e ver o que cada opção faz.
- find – comando para localizar arquivos e pastas em sistemas do tipo Unix.
- o ponto (.) - representa que copiamos o conteúdo do diretório atual.
- -iname ‘*.mp3’ – pesquise arquivos que correspondam à extensão .mp3.
- -exec cp – execute o comando ‘cp’ para copiar arquivos do diretório de origem para o de destino.
- --parents - crie os diretórios pais intermediários, se necessário, para preservar a estrutura do diretório pai.
- \{\} – é automaticamente substituído pelo nome dos arquivos encontrados pelo comando ‘find’. E as chaves têm escape para protegê-las da expansão pelo shell em algumas versões do comando "find". Você também pode usar {} sem caracteres de escape.
- ~/ostechnix – diretório de destino para salvar os arquivos correspondentes.
- \; – indica que os comandos a serem executados estão completos, e para executar o comando novamente na próxima partida.
Este comando encontrará e copiará todos os arquivos do tipo mp3 do diretório ~/Linux para o diretório ~/ostechnix. E também preserva a mesma estrutura de diretórios no diretório de destino.
Você pode verificar isso usando o comando "tree" em ambos os locais, como abaixo.
Como você pode ver na saída acima, o diretório de destino contém apenas os arquivos mp3 e sua estrutura de diretório é igual ao diretório de origem.
Se você estiver fazendo isso de algum outro local, especifique o caminho completo do diretório de origem como abaixo.
find ~/Linux -name '*.mp3' -exec cp --parents \{\} ~/ostechnix \;
Este comando encontrará todos os arquivos no local Linux/
Se a opção --parents não funcionar, você pode combinar o comando find com o comando cpio para copiar arquivos mantendo a estrutura de diretórios.
find . -name '*.mp3' | cpio -pdm ~/ostechnix
Aqui,
- cpio - Comando para copiar arquivos de e para arquivos.
- -p - Leia uma lista de nomes de arquivos da entrada padrão e copie-os para o diretório especificado.
- -d - Crie diretórios onde necessário.
- -m - Preserva a hora de modificação do arquivo.
Para obter mais detalhes, consulte as páginas de manual.
man find
man cp
man cpio
Leitura sugerida:
- Como organizar automaticamente tipos semelhantes de arquivos em pastas específicas
Método 2 – usando Rsync
Rsync é uma ferramenta poderosa usada de/para sistemas locais e remotos. Para copiar certos tipos de arquivos de um diretório para outro, mantendo a estrutura do diretório pai, execute:
rsync -a -m --include '*/' --include '*.mp3' --exclude '*' ~/Linux/ ~/ostechnix
Ou,
rsync -a --prune-empty-dirs --include '*/' --include '*.mp3' --exclude '*' ~/Linux/ ~/ostechnix
Aqui,
- rsync - ferramenta de cópia remota (e local) de arquivos.
- -a - modo de arquivo para preservar quase tudo (incluindo links simbólicos, datas de modificação, permissões de arquivo, proprietários etc.)
- -m, --prune-empty-dirs - remove diretórios vazios da árvore de origem. Se você quiser incluir diretórios vazios, basta remover esta opção do comando acima.
- --include="*/" --include="*.mp3" --exclude="*" - Para incluir apenas arquivos específicos, primeiro você precisa incluir esses arquivos específicos e, em seguida, excluir todos outros arquivos. No nosso caso, incluímos arquivos *.mp3 e excluímos todo o resto.
- ~/Linux - Diretório fonte.
- ~/ostechnix - Diretório de destino.
Exemplo de resultado:
Para obter mais detalhes, consulte as páginas de manual.
man rsync
Espero que isto ajude.