Renombrar archivos en el directorio

10

Cómo cambiar el nombre de los archivos en un directorio como el siguiente archivo: PMC21375.pdf.txtnecesito que me cambien el nombre 21375.txt. es decir, necesito eliminar ambos PMCy pdfde cada nombre de archivo.

kylejudita
fuente

Respuestas:

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

del shellaviso Es muy útil, puedes poner un código como lo hago yo en una sustitución.

Puede quitar el -n(interruptor de modo de funcionamiento en seco) cuando sus pruebas se vuelvan válidas.

advertencia Hay otras herramientas con el mismo nombre que pueden o no ser capaces de hacer esto, así que tenga cuidado.

Si ejecuta el siguiente comando ( linux)

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

y tienes un resultado como

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

entonces esta parece ser la herramienta correcta =)

Si no, para que sea el valor predeterminado (generalmente ya es el caso) Debiany derivado como Ubuntu:

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

(reemplazar /path/to/renamea la ruta de su perl's renamecomando.


Por último, pero no menos importante, esta herramienta fue originalmente escrita por Larry Wall, el padre de Perl.

Gilles Quenot
fuente
Esto no eliminará el .pdfnombre del archivo.
William Everett
Publicación editada en consecuencia.
Gilles Quenot
5

Además del comando renombrar, puede hacerlo directamente en bash (solo una forma de muchas):

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

Editado para mostrar a Pinyaka cómo 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
hmontoliu
fuente
Esto no eliminará el .pdfdel nombre del archivo.
William Everett
¿Lo has probado? porque para mi si. Se muestra en la edición.
hmontoliu
Culpa mía. Pensé que solo convertiría letras mayúsculas. Votado
William Everett
4

Hay varias utilidades para renombrar archivos, pero una de las más fáciles de usar es rename. En su caso, probablemente pueda hacer:

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

El primer parámetro es la parte del nombre del archivo a reemplazar. El segundo parámetro es la cadena de reemplazo. Aquí estoy usando ''para representar la cadena vacía. Todos los siguientes parámetros son archivos para renombrar, aquí solía *txtlimitar el reemplazo a archivos de texto.

renameya debería estar presente si está ejecutando Linux. Si está ejecutando un * BSD o OS X, es posible que deba instalarlo primero.

Submarino alado
fuente
No creo que haya un GNU rename. Hay uno de util-linux, y uno de perlcon sintaxis diferente. A la que te refieres se parece a la util-linuxque a veces se llama rename.ulpara no confundirse con la renamede perl, mientras que en algunos otros sistemas, renamees la de util-linux y perlse llama la de from prename.
Stéphane Chazelas
1
El mío es el de util-linux. Pensé erróneamente que era parte de los coreutils de GNU.
wingedsubmariner
La versión predeterminada de Debian para cambiar el nombre sería algo así rename 's/PMC// *.txtyrename s/\.pdf// *.txt
William Everett
1

Primero haga una copia de seguridad de sus archivos! Entonces, básicamente, puede usar una línea única de Python en el directorio actual con la forma general:

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

en su caso específico, puede usar esto dos veces:

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

quitar .pdfy nuevamente:

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

quitar PMC.

xaratustra
fuente
0

Prueba esto:

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

Los j=${i//\.pdf/}medios para sustituir .pdfen $inada. Del mismo modo, con la segunda asignación j deshacerse del PMC.

William Everett
fuente
0

Si está usando zsh, ese es un trabajo típico para zmv:

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

( zmvmaneja conflictos potenciales con gracia).

Stéphane Chazelas
fuente