2009-11-10 3 views
4

J'ai une liste de noms de fichiers appelée list.txt.copier une liste de fichiers via le terminal

Je souhaite copier les fichiers de cette liste dans un nouveau dossier.

Comment dois-je procéder?

Merci!

+0

Ceci est une question de script shell - c'est une question de programmation. –

Répondre

8

Vous pouvez le faire:

cp `cat list.txt` new-folder/ 

Notez que vous devez éviter d'avoir des espaces dans les noms de fichiers lorsque vous utilisez cette (une autre solution serait nécessaire si tel est le cas).

Les backticks exécuter la commande cat list.txt et d'utiliser la sortie de cette commande en tant que partie de la ligne de commande pour cp. Les retours à la ligne dans la sortie de cat sont regroupés dans des espaces avant la substitution de la ligne de commande.

+0

Notez que cela aplanit toute hiérarchie de répertoires dans les fichiers - ils seront tous dans un seul répertoire. –

+0

C'est vrai. La question indiquait une "liste de noms de fichiers" au lieu d'une "liste de noms de chemins". –

+0

Je suis d'accord - ce n'est pas un problème, à moins que le questionneur n'ait pas réfléchi au problème. Inversement, ma réponse n'est peut-être pas ce que le questionneur voulait - précisément parce qu'il préserve la structure du répertoire. Et il serait loin d'être inimaginable de vouloir couper certaines parties du chemin à partir des noms tout en préservant une partie de la structure du répertoire - dont aucune des réponses ne traite. –

2

utiliser une boucle

while read -r line 
do 
    cp "$line" /destination 
done <"file" 
+0

Notez que cela aplanit toute hiérarchie de répertoires dans les fichiers - ils seront tous dans un seul répertoire. –

+0

oui, mais oP ne dit pas qu'il doit avoir la même structure. il indique spécifiquement "copier ..... dans un nouveau dossier". – ghostdog74

2

Si vous souhaitez conserver la structure de répertoire, utilisez un de ces (en supposant GNU tar):

cpio -pvdm /destination <list.txt 

tar -cf - -F list.txt | tar -C /destination -x 

Dans les deux cas, le résultat net est que/destination est préfixé aux noms des fichiers dans list.txt.

1
boucle

:

dest="<destination folder>" #keep the quotes 
for i in `cat < list.txt` #loop each line of list.txt 
do 
cp $i $dest #in each loop copy $i, e/a line of list.txt to $dest 
echo "Done." 
done 

testés. Assurez-vous que "./list.txt" existe, sinon remplissez manuellement le chemin absolu. :)

+0

L'affiche d'origine ne veut pas déplacer le * fichier * list.txt dans le nouveau dossier; plutôt, list.txt contient une liste de fichiers à déplacer. –

+0

mon mauvais! lol je l'ai réparé – user231609

Questions connexes