J'ai un certain nombre de fichiers dans un dossier et je veux remplacer chaque caractère d'espace dans tous les noms de fichiers par des traits de soulignement. Comment puis-je atteindre cet objectif?
Cela devrait le faire:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
Je préfère utiliser la commande "renommer", qui prend des expressions régulières de style Perl:
rename "s/ /_/g" *
Vous pouvez faire un essai à sec avec le drapeau -n:
rename -n "s/ /_/g" *
Utilisez sh ...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
Si vous voulez l'essayer avant d'appuyer sur la gâchette, changez simplement mv
en echo mv
.
Que faire si vous souhaitez appliquer la tâche de remplacement récursivement? Comment feriez-vous cela?
Eh bien, je viens de trouver la réponse moi-même. Pas la solution la plus élégante (essaie de renommer également les fichiers qui ne respectent pas la condition) mais fonctionne. (BTW, dans mon cas, j'avais besoin de renommer les fichiers avec '% 20', pas avec un trait de soulignement)
#!/bin/bash
find . -type d | while read N
do
(
cd "$N"
if test "$?" = "0"
then
for file in *; do mv "$file" ${file// /%20}; done
fi
)
done
Si vous utilisez bash:
for file in *; do mv "$file" ${file// /_}; done
Essayez quelque chose comme ça, en supposant que tous vos fichiers étaient .txt:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
Le moyen le plus simple de remplacer une chaîne (caractère espace dans votre cas) par une autre chaîne dans Linux
est d'utiliser sed
. Vous pouvez le faire comme suit
sed -i 's/\s/_/g' *
J'espère que cela t'aides.
Citez vos variables:
for file in *; do echo mv "'$file'" "${file// /_}"; done
Supprimez l '"écho" pour effectuer le changement de nom réel.
Voici une autre solution:
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
Je crois que votre réponse est en Remplacez les espaces dans les noms de fichiers par des traits de soulignement.
Pour renommer tous les fichiers avec un .py
utilisation de l'extension, find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
Exemple de sortie,
$ find . -iname "*.py" -type f
./Sample File.py
./Sample/Sample File.py
$ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
$ find . -iname "*.py" -type f
./Sample/Sample_File.py
./Sample_File.py