Eles provavelmente falharão porque você não salvaguardou o espaço em branco em nomes de arquivos no segundo exemplo. A invocação é um pouco diferente:
find . -type f -mtime -58 -print0 | tar -czvf allmodified.tar.gz --null -T -
Aqui, find
envia os caminhos de arquivo terminados por NUL
caracteres. Eles são canalizados para tar
, que lê a entrada de stdin ( -T -
) delimitada por nulo ( --null
). O --no-recursion
não é necessário, pois você não incluirá os próprios diretórios no seu tarball.
Veja também: GNU tar 1.27: 6.3 Lendo nomes de um arquivo
Você poderia, então, extrair o arquivo do mesmo diretório que você pegou e colocar os arquivos nos diretórios aos quais eles pertencem. Observe que tar
sobrescreve os arquivos existentes após a extração. Para evitar isso, use a opção --skip-old-files
.
Quanto ao segundo exemplo, ele falhará se um arquivo ou caminho contiver espaço em branco, porque tar
vê os dois arquivos foo bar
e baz
(que find
outputs) como três, ou seja, tar foo bar baz
. A maneira apropriada de lidar com isso é canalizar a saída de find
com -print0
para o próximo comando, se esse comando tiver uma opção para ler a partir da entrada NUL
-delimited (que a maioria dos utilitários GNU faz).