Rinomina i file nella directory


10

Come rinominare i file in una directory come il seguente file:, PMC21375.pdf.txtho bisogno di essere rinominato 21375.txt. cioè, ho bisogno di rimuovere entrambi PMCe pdfda ciascun nome di file.

Risposte:


9

Con '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

dal shellprompt. È molto utile, puoi mettere un po 'di codice come faccio io in una sostituzione.

È possibile rimuovere il -n(selettore della modalità di funzionamento a secco) quando i test diventano validi.

avvertimento Esistono altri strumenti con lo stesso nome che possono o meno essere in grado di farlo, quindi fai attenzione.

Se si esegue il comando seguente ( linux)

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

e hai un risultato simile

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

allora questo sembra essere lo strumento giusto =)

In caso contrario, per renderlo predefinito (di solito già il caso) Debiane derivato come Ubuntu:

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

(sostituisci /path/to/renameil percorso del tuo perl's renamecomando.


Ultimo ma non meno importante, questo strumento è stato originariamente scritto da Larry Wall, il padre del Perl.


Ciò non rimuoverà .pdfdal nome del file.
William Everett,

Post modificato di conseguenza.
Gilles Quenot,

5

Oltre al comando rename puoi farlo direttamente in bash (solo un modo per molti):

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

Modificato per mostrare a Pinyaka come funziona:

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

Questo non rimuoverà .pdfdal nome del file.
William Everett,

l'hai provato? perché per me lo fa. Mostrato nella modifica.
hmontoliu,

Colpa mia. Ho pensato che sarebbe solo convertire lettere maiuscole. Upvoted.
William Everett,

4

Esistono diverse utilità per rinominare i file, ma una delle più facili da usare è rename. Nel tuo caso, probabilmente puoi fare:

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

Il primo parametro è la parte del nome file da sostituire. Il secondo parametro è la stringa di sostituzione. Qui sto usando ''per rappresentare la stringa vuota. Tutti i seguenti parametri sono file da rinominare, qui ho usato *txtper limitare la sostituzione ai file di testo.

renamedovrebbe già essere presente se si esegue Linux. Se si esegue un * BSD o OS X, potrebbe essere necessario installarlo prima.


Non credo che ci sia una GNU rename. Ce n'è uno da util-linuxe uno da perlcon sintassi diversa. Quello a cui ti riferisci assomiglia a quello util-linuxche a volte viene chiamato rename.ulper non essere confuso con il renameda perl, mentre su alcuni altri sistemi, renameè quello di util-linux e quello di perlviene chiamato prename.
Stéphane Chazelas,

1
Il mio è quello di util-linux. Ho erroneamente pensato che facesse parte dei coreutils GNU.
wingedsubmariner,

La versione predefinita di rinomina Debian sarebbe qualcosa del genere rename 's/PMC// *.txterename s/\.pdf// *.txt
William Everett,

1

Prima fai un backup dei tuoi file! Quindi fondamentalmente puoi usare un one-liner python nella directory corrente con il modulo generale:

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

nel tuo caso specifico, puoi usarlo due volte:

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

per rimuovere .pdfe ancora:

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

per rimuovere PMC.


0

Prova questo:

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

I j=${i//\.pdf/}mezzi di sostituire .pdfin $icon nulla. Allo stesso modo con il secondo incarico j sbarazzarsi del PMC.


0

Se lo stai utilizzando zsh, è un lavoro tipico per zmv:

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

( zmvgestisce i potenziali conflitti con garbo).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.