Como movo todos os arquivos de saída de um comando?

22

Eu tenho esse comando grep para encontrar arquivos sem a palavra Anexos neles.

grep -L -- Attachments *

Eu quero mover todos os arquivos que saem desse comando. Como faço isso no bash? Eu uso cachimbo? Uso uma declaração if / then mais prolixo em um script completo?

bernie2436
fonte

Respostas:

18

Se você souber que nenhum, se os nomes dos arquivos contiverem novas linhas, guias, espaços ou combinações de globos que possam produzir uma correspondência, isso pode ser mais fácil para um caso único:

mv $(grep -L Attachments *) dest_dir
Graeme
fonte
36

O que você quer fazer é usar uma opção de pipe e greps -Z:

Usando GNU grep e mv

grep -LZ -- Attachments * | xargs -0 mv -t target_directory

O -Zcombinado com xargs -0lida com qualquer nome de arquivo com caracteres especiais.

Usando BSD grep e mv (como no MacOS X)

grep -L --null -- Attachments * |
while IFS= read -r -d "" file; do 
    mv "./$file" target_directory
done

No BSD, grep -Zsignifica descomprimir , grep --nullfunciona tanto no BSD quanto no GNU. BSD mvnão possui opção-t

Anthon
fonte