Cómo cambiar el nombre de los archivos en un directorio como el siguiente archivo: PMC21375.pdf.txt
necesito que me cambien el nombre 21375.txt
. es decir, necesito eliminar ambos PMC
y pdf
de cada nombre de archivo.
Cómo cambiar el nombre de los archivos en un directorio como el siguiente archivo: PMC21375.pdf.txt
necesito que me cambien el nombre 21375.txt
. es decir, necesito eliminar ambos PMC
y pdf
de cada nombre de archivo.
Respuestas:
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 shell
aviso Es muy útil, puedes poner un código perl 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.
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) Debian
y derivado como Ubuntu
:
$ sudo update-alternatives --set rename /path/to/rename
(reemplazar /path/to/rename
a la ruta de su perl's rename
comando.
Por último, pero no menos importante, esta herramienta fue originalmente escrita por Larry Wall, el padre de Perl.
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
.pdf
del nombre del archivo.
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 *txt
limitar el reemplazo a archivos de texto.
rename
ya debería estar presente si está ejecutando Linux. Si está ejecutando un * BSD o OS X, es posible que deba instalarlo primero.
rename
. Hay uno de util-linux
, y uno de perl
con sintaxis diferente. A la que te refieres se parece a la util-linux
que a veces se llama rename.ul
para no confundirse con la rename
de perl
, mientras que en algunos otros sistemas, rename
es la de util-linux y perl
se llama la de from prename
.
rename 's/PMC// *.txt
yrename s/\.pdf// *.txt
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 .pdf
y nuevamente:
python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"
quitar PMC
.
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 .pdf
en $i
nada. Del mismo modo, con la segunda asignación j deshacerse del PMC.
Si está usando zsh
, ese es un trabajo típico para zmv
:
zmv 'PMC(*).pdf.txt' '$1.txt'
( zmv
maneja conflictos potenciales con gracia).
.pdf
nombre del archivo.