Renomeie os arquivos no diretório

9

Como renomear arquivos em um diretório como o seguinte arquivo: PMC21375.pdf.txt , preciso ser renomeado para 21375.txt . ou seja, eu preciso remover os dois PMC e pdf de cada nome de arquivo.

    
por kylejudita 29.10.2013 / 16:12

6 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

do prompt shell . É muito útil, você pode colocar alguns códigos como eu faço em uma substituição .

Você pode remover o -n (comutador do modo dry-run) quando seus testes se tornarem válidos.

Existem outras ferramentas com o mesmo nome que podem ou não ser capazes de fazer isso, por isso tome 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 certa =)

Se não, para torná-lo o padrão (normalmente já é o caso) em Debian e derivado como Ubuntu :

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

(substitua /path/to/rename pelo caminho do comando perl's rename .

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

    
por 29.10.2013 / 17:38
4

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

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 string de substituição. Aqui estou usando '' para representar a string vazia. Todos os parâmetros a seguir são arquivos para renomear, aqui eu usei *txt para limitar a substituição a arquivos de texto.

rename já deve estar presente se você estiver executando o Linux. Se você estiver executando um * BSD ou OS X, pode ser necessário instalá-lo primeiro.

    
por 29.10.2013 / 16:18
4

Além do comando rename, você pode fazê-lo diretamente no bash (apenas um modo de muitos):

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

Editado para mostrar ao 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
    
por 29.10.2013 / 16:34
0

Tente isto:

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

O j=${i//\.pdf/} significa substituir .pdf em $i por nada. Da mesma forma com a segunda tarefa j se livrar do PMC.

    
por 29.10.2013 / 17:13
0

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

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

( zmv lida com conflitos potenciais normalmente).

    
por 29.10.2013 / 23:00
0

Primeiro faça um backup dos seus arquivos! Então, basicamente, você pode usar um one-liner de python no diretório atual com a forma 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 .pdf e novamente:

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

para remover PMC .

    
por 30.07.2018 / 12:03

Tags