web-dev-qa-db-fra.com

Utilisez grep pour trouver du contenu dans des fichiers et déplacez-les s'ils correspondent

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?

50
user17582
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.

73
daveb

Cette alternative fonctionne lorsque xargs n'est pas disponible:

grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done
18
Tobias Kunze

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

5
vladkras

Voici ce que j'utilise dans Fedora Core 12:

grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR
5
Brad Vokey
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.

2
Loukan ElKadi

Peut-être que cela fonctionnera:

mv $(grep -l 'Subject: \[SPAM\]' | awk -F ':' '{print $1}') your_file
2
Ritz

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
1
e-satis

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

0
Mike