como encontrar um monte de arquivos e arquivá-los em uma linha de bash

4

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 {} \;
    
por HaiYuan Zhang 05.03.2012 / 07:13

3 respostas

5

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
    
por 05.03.2012 / 07:51
2

os backticks funcionariam também:

tar -cvf wzd.tar 'find . name "*.wzd" -printf "%f "'
    
por 06.03.2012 / 04:31
0

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

    
por 06.03.2012 / 08:04

Tags