Batch Renomeie os arquivos na pasta

9

Como posso retirar algum texto de nomes de arquivos em uma pasta?

Atualmente estou tentando:

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

Mas nada é renomeado

Eu tenho uma pasta pai, com várias subpastas, dentro de arquivos, que o OneDrive achou que seria uma boa ideia anexar um "(NEWER_timestamp)", e gostaria de removê-lo.

Exemplo de nomes de arquivos:

getyou.ico (NEWER_1417529079.87)
o7pm.ico (NEWER_1417529184.89)
o7th.ico (NEWER_1417529135.81)
    
por Kevin 15.12.2014 / 21:40

2 respostas

8

Tente o seguinte:

find /path/to/parrent-dir -type f -exec rename -n 's:[^/]*(.*) .*$::' {} +

./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
  • Todo [^/]*(.*) .*$ corresponde apenas à última parte do caminho que não contém / . E
  • Na regex acima, (.*) é um grupo de correspondência de tudo depois da última / e antes de um espaço . Sua referência de volta será .
  • .*$ corresponde tudo ao final $ do nome dos arquivos após o espaço.
  • Finalmente, na parte de substituição da renomeação s/.../REPLACEMENT/ , apenas mantivemos o grupo correspondente entre o último \ e um espaço (.*) , que é conhecido como grupo de correspondências.
por αғsнιη 15.12.2014 / 22:27
1

Você deve considerar usar as aspas fora da expressão regular (no interior, elas são consideradas literalmente como aspas) e sair do ( . Experimente;

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

A precisão da expressão pode não ser necessária, mas você não pode ser muito cauteloso ao modificar arquivos.

    
por muru 15.12.2014 / 21:51