Je voudrais changer une extension de fichier de *.txt
à *.text
. J'ai essayé d'utiliser le basename
commande, mais j'ai du mal à modifier plus d'un fichier.
Voici mon code :
files=`ls -1 *.txt`
for x in $files
do
mv $x "`basename $files .txt`.text"
done
J'obtiens cette erreur :
basename: too many arguments Try basename --help' for more information
Réponse acceptée :
Directement du wiki de Greg :
# Rename all *.txt to *.text
for f in *.txt; do
mv -- "$f" "${f%.txt}.text"
done
*.txt
est un modèle global, utilisant *
comme caractère générique pour correspondre à n'importe quelle chaîne. *.txt
correspond à tous les noms de fichiers se terminant par ".txt".
--
marque la fin de la liste des options. Cela évite les problèmes avec les noms de fichiers commençant par des tirets.
${f%.txt}
est une extension de paramètre, remplacée par la valeur du f
variable avec .txt
supprimé de la fin.
Voir également l'entrée expliquant pourquoi vous ne devriez pas analyser ls
.
Si vous devez utiliser basename
, votre syntaxe serait :
for f in *.txt; do
mv -- "$f" "$(basename -- "$f" .txt).text"
done