![Como tarar várias pastas, algumas recursivamente, outras não recursivamente](https://rvso.com/image/1597819/Como%20tarar%20v%C3%A1rias%20pastas%2C%20algumas%20recursivamente%2C%20outras%20n%C3%A3o%20recursivamente.png)
Eu tenho uma lista de diretórios. Alguns dos diretórios exigem que eles sejam tarados recursivamente, outros exigem apenas o arquivo que existe nesse diretório, sem subdiretórios: Usando o diretório/arquivos abaixo como exemplo, como seria meu comando tar:
/tmp/dir1/ - Recursively
/tmp/dir2/ - Only the files that exist in that directory, no subdirectories
/tmp/dir3/file1 - Only this single file.
Responder1
Aqui está o que eu descobri:
Primeiro, a estrutura de diretórios que estou usando como exemplo:
$ find dir1 dir2 dir3 -print
dir1
dir1/file1
dir1/file2
dir1/sub_dir1
dir1/sub_dir1/file1
dir2
dir2/file1
dir2/file2
dir2/sub_dir1
dir2/sub_dir1/file1
dir3
dir3/file1
$
A seguir, minha solução que consiste em três comandos:
Primeiro comando:
tar cvf archive.tar dir1
Bastante padrão. Vamos separar:
c
- Criarv
- Verbose (vamos ver o que está acontecendo)f
- o nome do arquivo que queremos, no nosso casoarchive.tar
archive.tar
- esse argumento real para a nossaf
mudançadir1
- o que queremos realmente revelar
Segundo comando:
find dir2 -maxdepth 1 -type f -print0 | xargs -0 tar rvf archive.tar
Vamos separar:
find dir2
- Onde queremos encontrar para pesquisar.-maxdepth 1
- Não desça além da profundidade 1 (fique na raiz dedir2
)-type f
- Procure por arquivos-print0
- Não imprima um caractere de nova linha no final; em vez disso, use um caractere nulo. Isso nos ajuda se find encontrar arquivos com espaço em branco.| xargs -0
- A entrada padrão que encontramos com o comando find é lançada aqui para ser executada respeitando nossoprint0
tar rvf
- A única opção nova aqui ér
. Esta é a nossa opção de acréscimo. Acrescenta ao nossoarchive.tar
final. Não deve ser confundido com aA
opção específica para anexar arquivos adicionais (.tar
-s).archive.tar
- O tar ao qual queremos anexar.O final deste comando é onde nosso stdinput é usado. por exemplo
archive.tar <stdinput>
Terceiro comando:
tar rvf archive.tar dir3/file1
Anexar a archive.tar
um único arquivo ( file1
) de dir3
.
E, finalmente, a aparência do tar depois de criado. A t
opção é usada para imprimir seu conteúdo.
$ tar tvf archive.tar
drwxrwxr-x mmallard/mmallard 0 2019-07-18 16:02 dir1/
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:01 dir1/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:01 dir1/file2
drwxrwxr-x mmallard/mmallard 0 2019-07-18 16:02 dir1/sub_dir1/
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir1/sub_dir1/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir2/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir2/file2
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir3/file1
$