Come rinominare i file in una directory come il seguente file:, PMC21375.pdf.txt
ho bisogno di essere rinominato 21375.txt
. cioè, ho bisogno di rimuovere entrambi PMC
e pdf
da ciascun nome di file.
Come rinominare i file in una directory come il seguente file:, PMC21375.pdf.txt
ho bisogno di essere rinominato 21375.txt
. cioè, ho bisogno di rimuovere entrambi PMC
e pdf
da ciascun nome di file.
Risposte:
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 shell
prompt. È molto utile, puoi mettere un po 'di codice perl come faccio io in una sostituzione.
È possibile rimuovere il -n
(selettore della modalità di funzionamento a secco) quando i test diventano validi.
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) Debian
e derivato come Ubuntu
:
$ sudo update-alternatives --set rename /path/to/rename
(sostituisci /path/to/rename
il percorso del tuo perl's rename
comando.
Ultimo ma non meno importante, questo strumento è stato originariamente scritto da Larry Wall, il padre del Perl.
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
.pdf
dal nome del file.
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 *txt
per limitare la sostituzione ai file di testo.
rename
dovrebbe già essere presente se si esegue Linux. Se si esegue un * BSD o OS X, potrebbe essere necessario installarlo prima.
rename
. Ce n'è uno da util-linux
e uno da perl
con sintassi diversa. Quello a cui ti riferisci assomiglia a quello util-linux
che a volte viene chiamato rename.ul
per non essere confuso con il rename
da perl
, mentre su alcuni altri sistemi, rename
è quello di util-linux e quello di perl
viene chiamato prename
.
rename 's/PMC// *.txt
erename s/\.pdf// *.txt
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 .pdf
e ancora:
python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"
per rimuovere PMC
.
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 .pdf
in $i
con nulla. Allo stesso modo con il secondo incarico j sbarazzarsi del PMC.
Se lo stai utilizzando zsh
, è un lavoro tipico per zmv
:
zmv 'PMC(*).pdf.txt' '$1.txt'
( zmv
gestisce i potenziali conflitti con garbo).
.pdf
dal nome del file.