Cela nécessite une découverte qui prend en charge le +
(peut utiliser à la place \;
, qui appellera rename
plusieurs fois), mais même POSIX find le précise:
find -mindepth 1 -depth -exec rename -n 's{/\.([^\/]*$)}{/$1}' {} +
- L'option
-depth
empêche les répertoires d'être renommé avant tous les fichiers qui s'y trouvent sont renommés
-mindepth 1
empêche find de tenter de renommer le répertoire en cours, .
.
-n
est juste d'imprimer ce qui serait renommé au lieu de renommer réellement (doit être retiré pour faire le renommage).
- L'expression régulière supprime la dernière période après laquelle il n'y a pas de barre oblique, si elle est précédée d'une barre oblique.
rename
ne remplace pas les fichiers existants, sauf si l'option -f
("force") est utilisé.
Pour une structure de répertoire de test comme celui-ci:
.
├── .dir1
│ ├── .dir2
│ │ ├── .dir3
│ │ │ └── .file2
│ │ └── .file1
│ ├── file3
│ └── .file6
├── dir5
│ └── .file5
├── .file4
├── test1.bar
└── test1.foo
la sortie est
rename(./dir5/.file5, ./dir5/file5)
rename(./.file4, ./file4)
rename(./.dir1/.file6, ./.dir1/file6)
rename(./.dir1/.dir2/.file1, ./.dir1/.dir2/file1)
rename(./.dir1/.dir2/.dir3/.file2, ./.dir1/.dir2/.dir3/file2)
rename(./.dir1/.dir2/.dir3, ./.dir1/.dir2/dir3)
rename(./.dir1/.dir2, ./.dir1/dir2)
rename(./.dir1, ./dir1)
et le résultat après le retrait -n
est
.
├── dir1
│ ├── dir2
│ │ ├── dir3
│ │ │ └── file2
│ │ └── file1
│ ├── file3
│ └── file6
├── dir5
│ └── file5
├── file4
├── test1.bar
└── test1.foo
Vous pourriez probablement obtenir une liste de tous dirs/fichiers qui doivent être renommés via la commande 'find' - mais récursion dans un répertoire vous êtes également rena ming pourrait conduire à des problèmes. – amon
J'ai juste besoin d'ajouter ./* à cette commande, fondamentalement, je n'ai pas besoin de renommer dans le répertoire parent, je dois seulement renommer dans les centaines de sous-répertoires. J'ai donc besoin de trouver un moyen de lui dire de pointer vers tous les répertoires d'un niveau vers le bas au lieu de la façon dont il est écrit qui est dans le répertoire courant. – Ortoch
Stack Overflow est un site de questions de programmation et de développement. Cette question semble être hors sujet car il ne s'agit pas de programmation ou de développement. Voir [Quels sujets puis-je poser à ce sujet?] (Http://stackoverflow.com/help/on-topic) dans le centre d'aide. Peut-être [Super utilisateur] (http: // superuser.com /) ou [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/) serait un meilleur endroit à demander. – jww