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 ?
Réponses
Trop de publicités?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.
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 deinput.txt
-
cp /path/to/origin_dir/% /path/to/destination/
effectueracp
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
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/
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