Use -print0
com find
para gerar nomes de arquivos delimitados por nulo e canalize para tar
usando -T - --null
para ler nomes de arquivos delimitados por nulos de stdin.
find ... -print0 | tar ... -T - --null
digamos que eu gostaria de encontrar todos os arquivos com sufixo .wzd sob o diretório atual e arquivar todos os arquivos fundados de cada vez, como posso fazê-lo?
o seguinte não funciona, a propósito
find . -name "*.wzd" 2>/dev/null -exec tar -cvf wzd.tar {} \;
Use -print0
com find
para gerar nomes de arquivos delimitados por nulo e canalize para tar
usando -T - --null
para ler nomes de arquivos delimitados por nulos de stdin.
find ... -print0 | tar ... -T - --null
os backticks funcionariam também:
tar -cvf wzd.tar 'find . name "*.wzd" -printf "%f "'
-exec command {} +
Essa variante da ação -exec
executa o comando especificado nos arquivos selecionados, mas a linha de comando é criada anexando cada nome de arquivo selecionado no final; o número total de invocações do comando será muito menor que o número de arquivos correspondentes. A linha de comando é construída da mesma maneira que xargs
constrói suas linhas de comando. Apenas uma instância de '{}'
é permitida no comando. O comando é executado no diretório inicial.