Como faço para mover todos os arquivos de saída de um comando?

21

Eu tenho este comando grep para encontrar arquivos sem a palavra Attachments neles.

grep -L -- Attachments *

Eu quero mover todos os arquivos que saem desse comando. Como eu faço isso no bash? Eu uso um cachimbo? Eu uso uma declaração mais completa se / então em um script completo?

    
por bernie2436 03.03.2014 / 17:37

2 respostas

17

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

mv $(grep -L Attachments *) dest_dir
    
por 03.03.2014 / 18:00
35

O que você quer fazer é usar um canal e a opção grep s -Z :

Usando o GNU grep e mv

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

O -Z combinado com xargs -0 manipula qualquer nome de arquivo com caracteres especiais.

Usando o 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 -Z significa descomprimir , grep --null funciona no BSD e no GNU. BSD mv carece de opção -t

    
por 03.03.2014 / 17:44