J'utilise grep pour générer une liste de fichiers à déplacer:
grep -L -r 'Subject: \[SPAM\]' .
Comment puis-je transmettre cette liste à la commande mv et déplacer les fichiers ailleurs?
grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR
Le -Z signifie la sortie avec des zéros (\ 0) après les noms de fichiers (donc les espaces ne sont pas utilisés comme délimiteurs).
xargs -0
signifie interpréter\0 pour être des délimiteurs.
Alors
-I{} mv {} DIR
signifie remplacer {}
avec les noms de fichiers, donc vous obtenez mv filenames DIR
.
Cette alternative fonctionne lorsque xargs n'est pas disponible:
grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done
C'est 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 changer pour 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
Voici ce que j'utilise dans Fedora Core 12:
grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR
mv `grep -L -r 'Subject: \[SPAM\]' .` <directory_path>
En supposant que le grep que vous avez écrit retourne les chemins de fichiers que vous attendez.
Peut-être que cela fonctionnera:
mv $(grep -l 'Subject: \[SPAM\]' | awk -F ':' '{print $1}') your_file
Il existe plusieurs façons, mais voici une méthode lente mais sûre:
IFS=$'\n'; # set the field separator to line break
for $mail in $(grep -L -r 'Subject: \[SPAM\]' .); do mv "$mail" your_dir; done;
IFS=' '; # restore FS
Fonctionne parfaitement pour moi:
déplacer les fichiers contenant le texte contenant le mot MYSTRINGTOSEARCH vers le répertoire MYDIR.
trouver . -type f -exec grep -il 'MYSTRINGTOSEARCH' {} \; -exec mv {} MYDIR/\;
J'espère que ça aide