Renomear arquivos no diretório


10

Como renomear arquivos em um diretório como o seguinte arquivo PMC21375.pdf.txt:, preciso renomear 21375.txt. ou seja, preciso remover os dois PMCe pdfde cada nome de arquivo.

Respostas:


9

Com 's rename:

rename 's/(PMC|\.pdf)//g' *pdf.txt 

Demo:

$ ls *txt
PMC21375.pdf.txt
$ rename -n 's/(PMC|\.pdf)//g' *txt 
PMC21375.pdf.txt -> 21375.txt

a partir do shellprompt. É muito útil, você pode colocar algum código como eu faço em uma substituição.

Você pode remover o -n(interruptor do modo de funcionamento a seco) quando seus testes se tornarem válidos.

Atenção Existem outras ferramentas com o mesmo nome que podem ou não conseguir fazer isso, portanto, tenha cuidado.

Se você executar o seguinte comando ( linux)

$ file $(readlink -f $(type -p rename))

e você tem um resultado como

.../rename: Perl script, ASCII text executable

então esta parece ser a ferramenta correta =)

Caso contrário, para torná-lo o padrão (geralmente já é o caso) Debiane derivado como Ubuntu:

$ sudo update-alternatives --set rename /path/to/rename

(substitua /path/to/renamepelo caminho do seu perl's renamecomando.


Por último, mas não menos importante, essa ferramenta foi originalmente escrita por Larry Wall, o pai do Perl.


Isso não removerá o .pdfnome do arquivo.
— 22813 William Everett

Postagem editada de acordo.
— Gilles Quenot

5

Além do comando rename, você pode fazê-lo diretamente no bash (apenas uma maneira de várias):

 for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done

Editado para mostrar a Pinyaka como funciona:

hmontoliu@ulises2:/tmp/foo$ touch PCM21375.pdf.txt PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ ls
   PCM21375.pdf.txt  PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
hmontoliu@ulises2:/tmp/foo$ ls
   21375.txt  21376.txt

Isso não removerá .pdfo nome do arquivo.
— William Everett

tentaste? porque para mim faz. Mostrado na edição.
— hmontoliu

Foi mal. Eu pensei que seria apenas converter letras maiúsculas. Votado.
— William Everett

4

Existem vários utilitários para renomear arquivos, mas um dos mais fáceis de usar é rename. No seu caso, você provavelmente pode:

rename PMC '' *txt
rename .pdf '' *txt

O primeiro parâmetro é a parte do nome do arquivo a ser substituído. O segundo parâmetro é a sequência de substituição. Aqui estou usando ''para representar a string vazia. Todos os parâmetros a seguir são arquivos para renomear, aqui eu costumava *txtlimitar a substituição aos arquivos de texto.

renamejá deve estar presente se você estiver executando o Linux. Se você estiver executando um * BSD ou OS X, talvez seja necessário instalá-lo primeiro.


Eu não acho que exista um GNU rename. Há um util-linuxe outro perlcom sintaxe diferente. O que você está se referindo se parece com o do util-linuxàs vezes chamado rename.ulpara não confundir com o renamedo perl, enquanto em outros sistemas renameé o do util-linux e o do perlé chamado prename.
— Stéphane Chazelas

1
O meu é o do util-linux. Por engano, pensei que fazia parte dos coreutils do GNU.
— wingedsubmariner

A versão padrão do Debian para renomear seria algo como isto rename 's/PMC// *.txte #rename s/\.pdf// *.txt
— William Everett

1

Primeiro faça um backup dos seus arquivos! Basicamente, você pode usar um liner python no diretório atual com o formato geral:

python -c "import glob,os; [os.rename(fn, fn.replace('PATTERN', 'REPLACE')) for fn in glob.glob('PATH/*')]"

no seu caso específico, você pode usar isso duas vezes:

python -c "import glob,os; [os.rename(fn, fn.replace('.pdf', '')) for fn in glob.glob('*')]"

para remover .pdfe novamente:

python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"

remover PMC.


0

Tente o seguinte:

for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done

Os j=${i//\.pdf/}meios para substituir .pdfem $icom nada. Da mesma forma, com a segunda tarefa j se livrando do PMC.


0

Se você estiver usando zsh, esse é um trabalho típico para zmv:

zmv 'PMC(*).pdf.txt' '$1.txt'

( zmvlida com possíveis conflitos normalmente).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.