web-dev-qa-db-fra.com

Essayer de trouver certains fichiers récursivement et de changer le nom de fichier

J'essaie de rechercher récursivement dans tous les sous-dossiers des fichiers avec des points dans leur nom de fichier et de supprimer les points (sauf le dernier)

La commande rename fonctionne seule, la commande find aussi, mais elles ne fonctionnent pas ensemble:

find ./ -type f -execdir rename -n 's/\.(?=[^.]*\.)//g' *.txt \;
2
Henry

Un glob dans un -execdir la commande ne fonctionnera pas, il vaut mieux laisser find rechercher les fichiers que vous voulez et exécuter rename uniquement sur eux:

find ./ -type f -name "*.txt" -exec rename -n 's/\.(?=[^.]*\.)//g' {} \;

Il s'avère que votre expression rename ne fonctionne pas avec les chemins, essayez plutôt ceci:

find ./ -type f -name "*.txt" -exec rename -n 's:\.(?=[^./]*\.)::g' {} \;
1
dessert