Rinomina in batch i file nella cartella


10

Come posso eliminare un po 'di testo dai nomi dei file in una cartella?

Attualmente sto provando:

rename s/"NEWER_(.*?)"//g *

Ma niente viene ribattezzato

Ho una cartella principale, con un gruppo di sottocartelle, all'interno dei quali sono contenuti i file, a cui OneDrive ha pensato che sarebbe stata un'ottima idea aggiungere un "(NEWER_timestamp)" e che vorrei rimuovere.

Nomi file di esempio:

getyou.ico (NEWER_1417529079.87)
o7pm.ico (NEWER_1417529184.89)
o7th.ico (NEWER_1417529135.81)

2
Puoi pubblicare un nome file di esempio?
Muru,

sicuro. domanda aggiornata con alcuni
Kevin,

Risposte:


8

Prova quanto segue:

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
  • Tutto [^/]*(.*) .*$corrisponde solo all'ultima parte del percorso che non contiene a /. E
  • In regex sopra, (.*)è un gruppo di abbinare tutto dopo l'ultimo /e prima di uno spazio . Il suo riferimento arretrato sarà $1.
  • .*$corrisponde a tutto alla fine $del nome del file dopo lo spazio.
  • Infine, nella parte sostitutiva di rinomina s/.../REPLACEMENT/, abbiamo appena mantenuto il gruppo corrispondente compreso tra l'ultimo \e uno spazio (.*)che è noto come gruppo di corrispondenze.

2

Dovresti considerare di usare le virgolette al di fuori della regex (all'interno, sono prese letteralmente come virgolette), e scappa (. Provare;

rename -n 's/ \(NEWER_\d{10}.\d{2}\)$//' *NEWER*

La precisione dell'espressione potrebbe non essere necessaria, ma non puoi essere troppo cauto quando modifichi i file.


tutto ciò che sta facendo è in sospeso. reading filenames from STDINSono già nella cartella Parent dove sono tutti questi file
Kevin,

@Kevin "Se nella riga di comando non viene fornito alcun nome file, i nomi file verranno letti tramite input standard." E poiché la shell esce *NEWER*così com'è se non viene trovata alcuna espansione, è necessario aver commesso un errore o utilizzare una shell che ha sostituito un carattere jolly senza pari con nulla.
Muru,

copiato e incollato, nella shell Ubuntu 14.10
Kevin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.