2010-11-04 34 views
1

Je voudrais exécuter un script bash qui nettoie récursivement chaque nom de fichier dans un répertoire. Par exemple, j'ai le nom du fichier.Nettoyage des noms de fichiers dans un répertoire

The.Sarah.Jane.Adventures.S04E07.The.Empty.Planet.Part1.WS.PDTV.XviD-BIA [sharethefiles.com] .avi The.Sarah.Jane .Adventures.S04E08.The.Empty.Planet.Part2.WS.PDTV.XviD-BIA [sharethefiles.com] .avi

Je veux convertir le fichier.

les aventures de Sarah Jane S04E07 la vide planète Part1.avi

The Sarah Jane Adventures S04E07 Le vide planète Part2.avi

Donc, j'ai ce script sed:

sed -e's/\[sharethefiles\.com\]//g; s/WS//g; s/PDTV//g; s/Xvid-BiA//g; s/XviD-BiA//g; s/\.\.//g; s/\./\ /g;' 

mais il vient avec des problèmes. Le . (point) est supprimé avant le suffixe (avi) et je ne suis pas vraiment sûr de savoir comment le remplacer par des fichiers si dynamiques. Parfois, il n'y a peut-être qu'un seul espace avant le suffixe et parfois il n'y en a pas puisque le script supprime également les doubles périodes.

Des idées pour résoudre le problème?

Merci pour toute aide!

Répondre

2

Vous souhaiterez peut-être convertir toutes les périodes en espaces, puis diriger vers une commande qui définit l'extension.

Exemple (en ignorant les autres cas particuliers que vous avez indiquées):

tr '.' ' ' | sed 's/ \([^ ]*\)$/.\1/' 
+0

Merci, qui semble fonctionner assez bien aux fins que je veux. Avec les cas spéciaux, j'ai fini par enlever l'espace avant que l'affaire n'arrive et cela a très bien fonctionné. Correction facile, blah ... Merci encore! – Ratty

+0

@Ratty: Vous pouvez éliminer le 'tr' en remplaçant votre avant-dernier motif par' s /\.\+//g' et en remplaçant le dernier avec le motif de Gingi. –