web-dev-qa-db-fra.com

Copier des fichiers avec plusieurs extensions

Je souhaite copier des fichiers avec plusieurs extensions vers un répertoire de destination unique.

Par exemple, je peux utiliser la commande suivante pour copier tout . Txt Dans le répertoire de travail dans un répertoire appelé destination:

cp -v *.txt destination/

Et je peux utiliser ce qui suit pour copier tout . PNG Répertoires dans le répertoire de travail à destination:

cp -v *.png destination/

Mais il faut beaucoup de saisir ces commandes séparées (même avec l'utilisation de l'historique de commandement). Alors, est-ce que je peux dire que je peux dire cp de copier des fichiers avec le modèle *.txt ou le motif *.png à destination? Idéalement, je voudrais être capable de spécifier plus de deux motifs - comme instructeur cp pour copier tout *.txt ou*.png ou*.jpg Fichiers à destination, par exemple.

Je suis sûr que tout cela est possible à l'aide d'un script shell - j'utilise bash, par exemple - mais y a-t-il un moyen de l'accomplir plus simplement, juste de la console? Puis-je utiliser une expansion de Brace pour le faire?

Je sais qu'il est possible de copier tous les fichiers du répertoire de travail, à l'exception de ceux-ci correspondant à certains modèles spécifiés , mais depuis mon répertoire de travail contient beaucoup plus d'extensions de fichier que je Non Vous voulez copier que ceux i do, ce serait une douleur.

Avez-vous des pensées à ce sujet?

24
Andrew

L'expansion de BRACE aura le travail effectué. man bash et rechercher Brace Expansion.

cp *.{txt,jpg,png} destination/

Edit :

Conformément à la demande de l'OP, la commande ci-dessus manquait l'option Verbose:

cp -v *.{txt,jpg,png} destination/
59
Timothy Martin
for filename in /Photos/directory/* ; do
    filenameWithoutPath="${filename##*/}"
    first_num="${filenameWithoutPath%%.*}"
    last_num="${filenameWithoutPath##*.}"
    cp $filename /Photos/directory/$first_num-$last_num.jpg
done

Ça va travailler!

0
Ofek Ortal