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