2008-09-18 19 views

Répondre

62
grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR 

-Z moyens de sortie avec des zéros (\ 0) après les noms de fichiers (si les espaces ne sont pas utilisés comme délimiteurs) .

xargs -0 

signifie interpréter \ 0 comme délimiteurs.

Puis

-I{} mv {} DIR 

moyens remplacent {} avec les noms de fichiers, vous obtenez mv filenames DIR.

+1

Merci, la capitale -Je devrais me minuscule sur mon xargs – user17582

+0

Dans mon xargs, -i est obsolète. Mais sandrv peut avoir une version plus ancienne (ainsi, YMMV). – gbarry

+6

Ne devrait-il pas être -l au lieu de -L? – TopQ

0

Vous pouvez passer le résultat à la commande suivante en utilisant grep ... | xargs mv {} destination

Pour plus d'informations, consultez man xargs.

1

Il y a plusieurs façons, mais voici une lente mais failsafe:

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 
16

Cette alternative fonctionne où xargs n'est pas Availabe:

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

C'est ce que j'utilise dans Fedora Core 12:

grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR 
1

Peut-être que cela fonctionnera:

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

travail parfait pour moi:

  • déplacez les fichiers contenant le texte contenant le mot MYSTRINGTOSEARCH dans le répertoire MYDIR.

    trouver. -type f -exec grep -il 'MYSTRINGTOSEARCH' {} \; -exec mv {} MYDIR/\;

J'espère que cette aide

2

C'est ce qui m'a aidé:

grep -lir 'spam' ./ | xargs mv -t ../spam

Bien sûr, j'étais déjà dans le dossier nécessaire (c'est pourquoi ./) et les déplace dans le dossier voisin . Mais vous pouvez les changer à tous les chemins.

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.

Stolen ici: Grep command to find files containing text string and move them

1
mv `grep -L -r 'Subject: \[SPAM\]' .` <directory_path> 

En supposant que le grep vous avez écrit les déclarations des chemins de fichiers que vous attendez.