Comment déplacer tous les fichiers issus d'une commande?

22

J'ai cette commande grep pour trouver des fichiers sans le mot Pièces jointes.

grep -L -- Attachments *

Je souhaite déplacer tous les fichiers générés par cette commande. Comment faire ça en bash? Dois-je utiliser une pipe? Dois-je utiliser une instruction if / then plus verbeuse dans un script complet?

bernie2436
la source

Réponses:

18

Si vous savez qu'aucun si les noms de fichiers contiennent de nouvelles lignes, tabulations, espaces ou combinaisons globales qui peuvent produire une correspondance, cela peut être plus facile pour un cas unique:

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

Ce que vous voulez faire est d'utiliser une option pipe et greps -Z:

Utilisation de GNU grep et mv

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

Le -Zcombiné avec xargs -0gère tous les noms de fichiers avec des caractères spéciaux.

Utiliser BSD grep et mv (comme sur MacOS X)

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

Sur BSD, grep -Zsignifie décompresser , grep --nullfonctionne à la fois sur BSD et GNU. BSD mvmanque d'option-t

Anthon
la source