J'ai un ensemble de fichiers sur lequel je voudrais appliquer la même commande et la sortie doit contenir le même nom que le fichier traité, mais avec une extension différente.
Actuellement, je suis en train de renommer /my/data/Andrew.doc en /my/data/Andrew.txt. Je souhaite le faire pour tous les fichiers .doc du dossier/my/data/et pour en conserver le nom.
J'ai essayé plusieurs versions mais je suppose que quelque chose ne va pas dans la syntaxe car je suis nouveau pour Linux.
Il existe au moins cent milliards de façons différentes d'aborder cette question, mais voici les principaux candidats:
for f in ./*.doc; do
# do some stuff here with "$f"
# remember to quote it or spaces may misbehave
done
find
La commande find
a une jolie petite commande exec
qui est idéale pour exécuter des tâches (avec certaines mises en garde). La recherche est meilleure que la lecture de base car vous pouvez vraiment filtrer les fichiers que vous sélectionnez. Faites attention à la syntaxe étrange.
find . -iname '*.doc' -exec echo "File is {}" \;
Notez que find
est récursif, vous pouvez donc utiliser -maxdepth 1
pour conserver find
dans le répertoire de travail en cours. -type f
peut être utilisé pour filtrer les fichiers normaux.
La commande rename
ressemble à sed en recherche. Évidemment, cela ne fera rien pour convertir le format.
rename 's/doc$/txt/' *.doc
for i in *.doc ; do mv "$i" $(echo $i | sed s/doc/txt/) ; done