Je voudrais copier des fichiers avec plusieurs extensions dans un seul répertoire de destination.
Par exemple, je peux utiliser la commande suivante pour copier tous les fichiers .txt du répertoire de travail dans un répertoire appelé destination
:
cp -v *.txt destination/
Et je peux utiliser ce qui suit pour copier tous les répertoires .png du répertoire de travail vers destination
:
cp -v *.png destination/
Mais il faut beaucoup de temps pour les taper en tant que commandes distinctes (même avec l'utilisation de l'historique des commandes). Alors, est-il possible de dire cp
de copier des fichiers avec le motif *.txt
ou le motif *.png
vers destination
? Idéalement, je voudrais être en mesure de préciser plus de deux modèles - comme l' instruction cp
de copier tout *.txt
ou *.png
ou *.jpg
des fichiers destination
, par exemple.
Je suis sûr que tout cela est possible en utilisant un script shell - j'utilise bash
, par exemple - mais y a-t-il un moyen de le faire plus simplement, juste à partir de la console? Puis-je utiliser l'expansion d'accolade pour le faire?
Je sais qu'il est possible de copier tous les fichiers du répertoire de travail à l'exception de ceux correspondant à certains modèles spécifiés , mais comme mon répertoire de travail contient beaucoup plus d'extensions de fichiers que je ne veux pas copier que celles que je fais , ce serait pénible.
Avez-vous des réflexions à ce sujet?
cp -v *.txt *.png destination/
?Réponses:
L'expansion de l'accolade fera le travail.
man bash
et recherchezBrace Expansion
.MODIFIER:
Conformément à la demande du PO, la commande ci-dessus manquait l'option détaillée:
la source
cp data/images/*.{jpg,jpeg,png,mp4} destination/
et qu'unmp4
fichier n'existe pas, j'obtiens uneNo such file or directory
erreur qui rompt le script. Puis-je faire en sorte que les multiples extensions gèrent correctement les formats manquants?Ça marche!
la source