2017-04-26 1 views
0

J'essaie de trouver les fichiers contenant des chaînes situées dans un fichier texte dans leurs noms de fichiers, puis copiez ces fichiers dans un nouveau répertoire.Cygwin/Linux - Trouver les fichiers qui contiennent des chaînes à partir d'un fichier

Example 1.txt contains strings line by line: 
1234 
1666 

Directory contains files: 
JOHN-1234-TEXT.CSV 
DAVE-1666-TEXT.CSV 
LAURA-1826-TEXT.CSV 

If code is successful it will copy the files to a new specified directory: 
JOHN-1234-TEXT.CSV 
DAVE-1666-TEXT.CSV 

Si quelqu'un peut m'aider je l'apprécierais grandement.

+0

Assurez-vous que votre fichier de configuration a une ligne unix se termine, à savoir '\ n' pas' \ r \ n'. Utilisez 'd2u' ou' dos2unix' pour convertir. –

Répondre

0

trouver + approche grep + tr + xargspipeline:

find olddir -type f -print | grep -f "1.txt" | tr '\n' '\0' | xargs -0 -I{} cp {} newdir 

répertoire olddir contient les fichiers initiaux

grep -f "1.txt" - Obtenir modèles de fichiers, un par ligne

+0

ne semble pas fonctionner, crée un fichier – kayboxa

+0

@kayboxa, vous devez spécifier vos noms de répertoires réels au lieu de 'olddir' et' newdir' (cela devrait fonctionner correctement) – RomanPerekhrest

0

solution rapide:

while read line;do 
    find -iname "*$line*" -exec cp {} newdir/ \; 
done < string_file 
+0

utiliser en boucle pour lire un fichier, pas pour ... http : //mywiki.wooledge.org/BashFAQ/001 – Sundeep