web-dev-qa-db-fra.com

Renommez tous les fichiers .txt dans les sous-dossiers avec "find"

Je souhaite renommer tous les fichiers .txt situés dans un dossier. Ce renom rename tous les .txt pour moi:

rename 's/\.txt//g' *.txt -v

mais quand je veux renommer tous les sous-dossiers avec

find ./ -type d -execdir rename 's/\.txt//g' *.txt -v ";"

Cela me montre:

Can't rename *.txt *: No such file or directory
Can't rename *.txt *: No such file or directory
...

De plus, find ./ -type -d me montre correctement tous les sous-dossiers actuels.

Pourquoi j'ai le message No such file or directory?

3
ICE

Vous devez utiliser la syntaxe -exec de find correctement, en utilisant '{}' pour représenter les fichiers trouvés.

find ./ -type d -name '*.txt' -execdir rename -n 's/\.txt//g' '{}' \;

Supprimez -n après rename une fois que vous l'avez testé.

(en supposant que vous vouliez vraiment changer les noms de répertoire et non les noms de fichier normaux - si c'était le cas, utilisez -type f au lieu de type -d)

6
Zanna