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
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?
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
Tags command-line bash command scripting move