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).