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.
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.
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 shellaviso 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) 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.
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
.pdfdel 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 *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.
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.
rename 's/PMC// *.txtyrename 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 .pdfy 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 .pdfen $inada. 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'
( zmvmaneja conflictos potenciales con gracia).
.pdfnombre del archivo.