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?
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/
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!