48 votes

Linux (mv ou cp) des fichiers spécifiques à partir d'une liste de fichiers texte ?

J'ai un répertoire de nombreux fichiers, quelque chose comme 50 000 pdf et autres fichiers sur un serveur. J'ai besoin de déplacer des fichiers spécifiques vers un autre répertoire. Je peux générer une liste des fichiers qui doivent être déplacés en format csv ou tout autre format texte.

Je dois exécuter un script bash script et déplacer ou copier les fichiers répertoriés dans le fichier texte vers un autre répertoire.

Existe-t-il un moyen simple de procéder ? Toute suggestion ou ressource serait grandement appréciée.

43voto

jason saldo Points 5036

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

Il traitera tout nom de fichier valide, à moins qu'il ne contienne une nouvelle ligne, si les fichiers sont listés un par un.

42voto

David Points 344

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

20voto

MadHatter Points 77602
for file in `cat listoffiles`; do mv "$file" /path/of/destination ; done

en supposant que bash, plus listoffiles contenant un fichier par ligne. Ma seule objection à l'utilisation de 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 modifié pour faire cela, mais parfois, le plus simple est le mieux !

5voto

cristian Points 11
rsync --files-from=file_list.txt /path/to/source/ /path/to/dest/

Rsync présente l'avantage supplémentaire par rapport à la méthode cp o mv car il crée automatiquement des dossiers s'ils n'existent pas.

4voto

Khaled Points 35208

Cela dépend du format du fichier texte dont vous disposez. Par exemple, si la liste des fichiers est écrite de telle sorte que chaque fichier se trouve sur une nouvelle ligne. Vous pouvez utiliser xargs comme suit :

$ cat your_text_file | xargs cp -t /path/to/destination

Vous pouvez également utiliser find avec la commande -exec pour copier/déplacer les fichiers.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X