C'est ce que j'utilise dans Fedora Core 12 :
grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR
Si vous souhaitez rechercher et déplacer des fichiers qui ne correspondent pas à votre modèle (déplacez les fichiers qui ne contiennent pas 'Subject \[SPAM\]'
dans cet exemple) utilisez :
grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR
Le -Z signifie une sortie avec des zéros (\0) après les noms de fichiers (les espaces ne sont donc pas utilisés comme délimiteurs).
xargs -0
signifie interpréter \0 comme des délimiteurs.
Le -L signifie trouver les fichiers qui ne correspondent pas au modèle. Remplacer -L
avec -l
si vous souhaitez déplacer des fichiers correspondant à votre modèle.
Alors
-I{} mv {} DIR
signifie remplacer {}
avec les noms de fichiers, vous obtenez donc mv filenames DIR
.
Voici ce qui m'a aidé :
grep -lir 'spam' ./ | xargs mv -t ../spam
Bien sûr, j'étais déjà dans le dossier requis (c'est pourquoi ./
) et les a déplacés vers le dossier voisin. Mais vous pouvez les remplacer par n'importe quel chemin.
Je ne sais pas pourquoi la réponse acceptée n'a pas fonctionné. De plus, je n'avais pas d'espaces et de caractères spéciaux dans les noms de fichiers - peut-être que cela ne fonctionnera pas.
Volé ici :commande Grep pour rechercher des fichiers contenant une chaîne de texte et les déplacer
Cette alternative fonctionne là où xargs n'est pas disponible :
grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done