Apagar primeira parte dos nomes dos arquivos

3

Eu tenho um diretório cheio de arquivos foo_num.txt. Eu gostaria de renomear tudo para num.txt (que é excluir a parte "foo_"). Posso fazer isso em uma linha?

    
por Ditte 10.08.2015 / 11:19

2 respostas

4

Se você não quer se preocupar com loops no Bash, você pode querer usar o rename programa:

rename "s/foo_//" *.txt

O primeiro argumento é a expressão Perl que define a regra de substituição de string. Neste caso: [s] ubstitute "foo_" com "".

O segundo argumento filtra os arquivos que você deseja renomear.

    
por Falko 10.08.2015 / 12:00
1

Como sua primeira parte é separada por _ , sugiro que você

rename 's/.*?_//' *.txt

O ? significa não voraz , portanto, somente a primeira ocorrência de _ será substituída.

Exemplo

$ ls -laog
total 4280
drwxrwxr-x  2 4329472 Aug 10 13:05 .
drwx------ 55   20480 Aug 10 12:54 ..
-rw-rw-r--  1       0 Aug 10 13:05 foo_1_1.txt
-rw-rw-r--  1       0 Aug 10 13:05 foo_2_2.txt
-rw-rw-r--  1       0 Aug 10 13:05 foo_3_3.txt

$ rename 's/.*?_//' *.txt

$ ls -laog
total 4280
drwxrwxr-x  2 4329472 Aug 10 13:06 .
drwx------ 55   20480 Aug 10 12:54 ..
-rw-rw-r--  1       0 Aug 10 13:05 1_1.txt
-rw-rw-r--  1       0 Aug 10 13:05 2_2.txt
-rw-rw-r--  1       0 Aug 10 13:05 3_3.txt

Para substituir todas as ocorrências, use

rename 's/.*_//' *.txt

Exemplo

$ ls -laog
total 4280
drwxrwxr-x  2 4329472 Aug 10 13:08 .
drwx------ 55   20480 Aug 10 12:54 ..
-rw-rw-r--  1       0 Aug 10 13:08 foo_1_1.txt
-rw-rw-r--  1       0 Aug 10 13:08 foo_2_2.txt
-rw-rw-r--  1       0 Aug 10 13:08 foo_3_3.txt

$ rename 's/.*_//' *.txt

$ ls -laog
total 4280
drwxrwxr-x  2 4329472 Aug 10 13:09 .
drwx------ 55   20480 Aug 10 12:54 ..
-rw-rw-r--  1       0 Aug 10 13:08 1.txt
-rw-rw-r--  1       0 Aug 10 13:08 2.txt
-rw-rw-r--  1       0 Aug 10 13:08 3.txt
    
por A.B. 10.08.2015 / 13:09