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.