186 votes

Copie de plusieurs fichiers spécifiques d'un dossier à un autre

J'ai un grand dossier de photos (des milliers), et j'ai une longue liste de fichiers, par nom de fichier exact, que je dois copier dans un autre dossier. Je voudrais savoir s'il existe un moyen de sélectionner plusieurs fichiers spécifiques de ce dossier, par nom, et de les copier dans un autre dossier, en utilisant le terminal, sans les copier individuellement ?

96voto

Ross Allen Points 1419

Peut-être qu'un détail de votre question m'échappe, mais les réponses données me semblent excessives. Si vous voulez une solution en ligne de commande et non un script, pourquoi pas :

cd /path/to/src/
cp -t /path/to/dst/ file1 file2 file3 ...

L'avantage de cette méthode est que vous pouvez compléter les noms de fichiers par des tabulations.

2voto

Sergiy Kolodyazhnyy Points 97292

D'après la description de la question, je comprends que.. :

  • il y a une liste de fichiers, vraisemblablement un fichier texte input.txt
  • la liste ne contient que des noms de fichiers
  • il existe un répertoire particulier où se trouvent ces noms de fichiers.

Ainsi, on peut utiliser la commande suivante :

xargs -I % --arg-file=input.txt cp  /path/to/origin_dir/%  /path/to/destination

Explication :

  • -I % spécifie le symbole du fichier en cours de traitement à utiliser dans la commande
  • --arg-file=input.txt spécifie de prendre des arguments à la commande à partir de input.txt
  • cp /path/to/origin_dir/% /path/to/destination/ effectuera cp avec /path/to/origin_dir/% remplacé par /path/to/origin_dir/ et le nom du fichier en cours de traitement.

Exemple pratique :

$ cat input.txt
file2.txt
file1.txt
file3.txt
$ ls ./docs
file1.txt  file2.txt  file3.txt
$ xargs -I % --arg-file=input.txt cp ./docs/% ./docs_destination/
$ ls ./docs_destination/
file1.txt  file2.txt  file3.txt

0voto

rainabba Points 227

Ayant rencontré ce problème à plusieurs reprises, ma solution est un petit script pour cp tout dans un dossier pour qu'il ressemble exactement à l'archive que je veux (dossiers et tout), puis cd <folder_to_be_zipped> y zip -r ../<zip_file_name>.zip . et je me retrouverai avec un .zip là où je le veux, ayant exactement la structure que je veux.

Une autre façon est d'utiliser plusieurs commandes zip telles que :

cd <parent_of_directory> && zip -r /path/to/archive.zip directory/* && \
cd <folder_with_files> && zip /path/to/archive.zip addfile1 addfile2 addfile2;

Les échantillons sont gracieusement offerts par : https://wpguru.co.uk/2018/12/how-to-add-files-to-an-existing-zip-archive-on-macos-and-linux/

0voto

Ndm Points 13

Ici la commande ne concerne pas un fichier spécifique mais vous pouvez copier ou déplacer tous les fichiers d'un répertoire à un autre.

Exécutez la commande suivante

find path/to/origin/dir -type f -print0 | xargs -0 cp -t path/to/destination/dir

pour déplacer tous les fichiers, remplacez cp a mv dans la commande ci-dessus

0voto

Shez Ratnani Points 71

De cp --help :

cp [OPTION]... SOURCE... DIRECTORY

El SOURCE... avec trois virgules signifie des paramètres multiples, c'est-à-dire que vous pouvez simplement faire

cd your_source_dir
cp file1 file2 dest_dir

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