Comment puis-je supprimer du texte des noms de fichiers dans un dossier?
J'essaye actuellement:
rename s/"NEWER_(.*?)"//g *
Mais rien ne se renomme
J'ai un dossier parent, avec un tas de sous-dossiers, dans lequel se trouvent des fichiers, ce que OneDrive pensait être une bonne idée d'ajouter un "(NEWER_timestamp)" à, et j'aimerais le supprimer.
Exemple de noms de fichiers:
getyou.ico (NEWER_1417529079.87)
o7pm.ico (NEWER_1417529184.89)
o7th.ico (NEWER_1417529135.81)
Essayez ce qui suit:
find /path/to/parrent-dir -type f -exec rename -n 's:[^/]*(.*) .*$:$1:' {} +
./o7th.ico (NEWER_1417529135.81) renamed as /o7th.ico
./sub-dir (NEWER_1417529135.81)/getyou.ico (NEWER_1417529079.87) renamed as /sub-dir (NEWER_1417529135.81)/getyou.ico
./sub-dir (NEWER_1417529135.81)/o7pm.ico (NEWER_1417529184.89) renamed as /sub-dir (NEWER_1417529135.81)/o7pm.ico
./getyou.ico (NEWER_1417529079.87) renamed as /getyou.ico
./o7pm.ico (NEWER_1417529184.89) renamed as /o7pm.ico
[^/]*(.*) .*$
ne correspond qu'à la dernière partie du chemin qui ne contient pas de /
. Et(.*)
est un groupe de tout correspondant après le dernier /
et avant un espace. Sa référence arrière sera $1
..*$
fait correspondre tout le contenu à end$
du nom de fichier après l'espace.s/.../REPLACEMENT/
, nous avons simplement conservé le groupe correspondant qui se situe entre le dernier \
et un espace(.*)
, appelé groupe de correspondances.Vous devriez envisager d'utiliser les guillemets en dehors de la regex (à l'intérieur, ils sont pris littéralement comme des guillemets) et d'échapper à (
. Essayer;
rename -n 's/ \(NEWER_\d{10}.\d{2}\)$//' *NEWER*
La précision de l'expression n'est peut-être pas nécessaire, mais vous ne pouvez pas être trop prudent lorsque vous modifiez des fichiers.