Solution 1 :
Afin d'éviter une utilisation inutile de cat
(et si vous n'utilisez pas rsync
):
xargs -a file_list.txt mv -t /path/to/dest
Cela gérera tout nom de fichier valide, à moins qu'il ne contienne une nouvelle ligne, si les fichiers sont répertoriés un par ligne.
Solution 2 :
rsync a plusieurs options qui peuvent prendre une liste de fichiers à traiter (--files-from
, --include-from
, etc.).
Par exemple, ceci fera l'affaire :
rsync -a /source/directory --files-from=/full/path/to/listfile /destination/directory
Solution 3 :
for file in `cat listoffiles`; do mv "$file" /path/of/destination ; done
en supposant bash, plus listoffiles
contenant un fichier par ligne. Ma seule objection à la route rsync est que l'OP demande une méthode pour déplacer les fichiers, pas pour les copier. rsync a plus de drapeaux qu'un mariage royal, donc je suis sûr qu'il peut être encore modifié pour faire ça, mais parfois plus simple c'est mieux !
Solution 4 :
rsync --files-from=file_list.txt /path/to/source/ /path/to/dest/
Rsync a l'avantage supplémentaire par rapport au cp
ou mv
car il créera automatiquement des dossiers s'ils n'existent pas.
Solution 5 :
Cela dépend du format du fichier texte que vous avez. Par exemple, si vous avez la liste des fichiers écrite de telle sorte que chaque fichier se trouve sur une nouvelle ligne. Vous pouvez utiliser des xargs comme :
$ cat your_text_file | xargs cp -t /path/to/destination
Vous pouvez également utiliser find
commande avec -exec
option. pour copier/déplacer les fichiers.