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?

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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.