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?

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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.