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.
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:
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 perl 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.
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.
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
.pdfo nome do arquivo.
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.
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.
rename 's/PMC// *.txte #rename s/\.pdf// *.txt
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.
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.
Se você estiver usando zsh, esse é um trabalho típico para zmv:
zmv 'PMC(*).pdf.txt' '$1.txt'
( zmvlida com possíveis conflitos normalmente).
.pdfnome do arquivo.