it-swarm-es.com

¿Cómo cambio fácilmente el nombre de varios archivos usando la línea de comandos?

Una de las formas en que renombre rápidamente los archivos en Windows es

F2 > Rename > Tab (to next file) > Rename ...

Pero en Ubuntu/Nautilus, no puedo pasar al siguiente archivo. Pero al estar en Linux, creo que debe haber una alternativa de línea de comando.

Sin embargo, a veces, es posible que desee tener más control sobre cómo cambiar el nombre de archivos específicos. En ese caso, quizás sea mejor poder pasar al siguiente archivo

103
Jiew Meng

Yo uso renametodo el tiempo. Es bastante simple, pero espero que conozcas expresiones regulares básicas:

rename "s/SEARCH/REPLACE/g"  *

Esto reemplazará la cadena SEARCHcon REPLACEen cada archivo (es decir, *). El /g significa global, por lo que si tuviera un SEARCH_SEARCH.jpg, se le cambiaría el nombre REPLACE_REPLACE.jpg. Si no tuviera /g, solo habría hecho una sustitución una vez, y ahora se llamaría REPLACE_SEARCH.jpg. Si desea no distinguir entre mayúsculas y minúsculas, agregue /i (eso sería, /gi o /ig al final).

Con expresiones regulares, puedes hacer mucho más.

Tenga en cuenta que este renamees el comando prenameNAME _ (también conocido como Perl renamename__), que admite expresiones regulares completas de Perl. Hay otro renameque usa patrones y no es tan poderoso. prenamesolía instalarse de manera predeterminada en Ubuntu (junto con Perl), pero ahora puede que tenga que hacer:

Sudo apt install rename

Aquí están algunos ejemplos:

Prefijo

Agregar :

rename 's/^/MyPrefix_/' * 
  • document.pdf renombrado a MyPrefix_document.pdf

Eliminar :

También puede eliminar cadenas no deseadas. Supongamos que tenía 20 archivos MP3 con el nombre CD RIP 01 Song.mp3 y deseaba eliminar la parte "CD RIP" y deseaba eliminarlos de todos ellos con un solo comando.

rename 's/^CD RIP //' *
  • CD RIP 01 Song.mp3 a 01 Song.mp3

Observe el espacio extra en '^CD RIP ', sin el espacio todos los archivos tendrían un espacio como primer carácter del archivo. También tenga en cuenta que esto funcionará sin el carácter ^, pero coincidirá con CD RIP  en cualquier parte del nombre de archivo. El ^ garantiza que solo elimina los caracteres si son el comienzo del archivo.

Sufijo

Agregar :

rename 's/$/_MySuffix/' *
  • document.pdf renombrado a document.pdf_MySuffix

Cambio :

rename 's/\.pdf$/.doc/' *

cambiará Something.pdf a Something.doc. (El motivo de la barra diagonal inversa es que . es un carácter comodín en regexp, por lo que .pdf coincide con qPDFmientras que \.pdf solo coincide con la cadena exacta .pdf. También es muy importante tener en cuenta, si no está familiarizado con BASH, debe colocar barras diagonales inversas entre comillas. No puede omitir comillas ni utilizar comillas dobles, o bash intentará traducirlas. Para bash \. y "\." es igual a .. (Pero se utilizan comillas dobles y barras invertidas, por ejemplo, "\ n" para una nueva línea, pero dado que "\." no es un escape de retroceso válido secuencia, se traduce en .)

En realidad, incluso puede encerrar las partes de la cadena entre comillas en lugar del todo: 's/Search/Replace/g' es lo mismo que s/'Search'/'Replace'/g y s/Search/Replace/g para BASH. Solo debes tener cuidado con los caracteres especiales (y espacios).


Sugiero usar la opción -n cuando no estés seguro de que tienes las expresiones regulares correctas. Muestra lo que sería renombrado, luego sale sin hacerlo. Por ejemplo:

rename -n s/'One'/'Two'/g *

Esto enumerará todos los cambios que habría realizado, si no hubiera colocado la bandera -n allí. Si se ve bien, presione Up para regresar, luego borre el -n y presione Enter (o reemplácelo con -v para generar todos los cambios que realice).

Nota : las versiones de Ubuntu anteriores a 17.04 no se envían con renamepor defecto, sin embargo, todavía está disponible en los repositorios. Use Sudo apt install rename para instalarlo

187
Matt

Prueba pyrenamer .

No está integrado con nautilus, pero hace el trabajo. Aquí es una revisión.

Thunar (parte de XFCE) también tiene un renombrador que puede ejecutar por separado.

Thunar bulk renamer

21
RolandiXor

Parece que hay un proyecto en el launchpad llamado nautilus-renamer . Puede instalarlo ejecutando make install una vez que descargue el script y lo descomprima. Parece que tiene algunas funcionalidades o si sabe algo de programación, podría mejorarla según sus necesidades, ya que es solo una secuencia de comandos python.

enter image description here

9
sagarchalise

En la línea de comando, para cambiar el nombre de un solo archivo, el comando es simplemente

mv file1.txt file2.txt

Si desea hacerlo en lote, probablemente querrá hacerlo a través de un script. Si proporciona más detalles, yo u otra persona probablemente podamos preparar uno para usted. Dicho esto, un script para agregar cosas a un archivo podría verse así:

#!/bin/bash
for file in *
do
    # separate the file name from its extension
    if [[ $file == *.* ]]; then
      ext="${file##*.}"
      fname="${file%.*}"
      mv "$file" "${fname}_APPENDSTUFFHERE.$ext"
    else
      mv "$file" "${file}_APPENDSTUFFHERE"
    fi
done

Dependiendo exactamente de cómo necesita cambiar el nombre de las cosas, esto probablemente se modificará, por ejemplo, si tiene que seguir reglas específicas de cambio de nombre. (Personalmente, haría esto a través de un script de Perl ya que mi bash-foo no es tan bueno, pero solo soy yo).

Tenga en cuenta que obtuve la separación del nombre de archivo y la extensión de na pregunta anterior .

8
Dang Khoa

En caso de que desee hacerlo sin línea de comando, de manera similar a lo que ha estado haciendo en Windows, use tecla de flecha derecha en lugar de tecla de tabulación. Esto seleccionará el siguiente archivo tal como lo hace la pestaña en Windows.

7
Rafał Cieślak

No es realmente la misma pregunta que ¿Cómo puede cambiar el nombre de muchos archivos a la vez? pero voy a sugerir el mismo programa que sugerí en esa respuesta: qmv .

qmv es una herramienta útil del paquete renameutils. Le permite usar su editor de texto favorito para cambiar el nombre de los archivos. Combinado con el poder de vim, tiene una excelente utilidad de cambio de nombre.

Por lo general, lo invoco como qmv -f do en el directorio donde quiero cambiar el nombre de un grupo de archivos. O si quiero cambiar el nombre recursivamente qmv -R -f do.

Siempre que necesito cambiar el nombre de varios archivos, siempre recurro a qmv (y vim).

http://www.nongnu.org/renameutils/

7
dempa

Si la única opción adecuada es renombrar los archivos manualmente, una excelente manera de hacerlo es usar vidirNAME _ (en el paquete moreutilsNAME _ ):

Sudo add-apt-repository universe && Sudo apt-get update && Sudo apt-get install moreutils
DESCRIPTION
       vidir allows editing of the contents of a directory in a text editor.
       If no directory is specified, the current directory is edited.

       When editing a directory, each item in the directory will appear on
       its own numbered line. These numbers are how vidir keeps track of what
       items are changed. Delete lines to remove files from the directory, or
       edit filenames to rename files. You can also switch pairs of numbers
       to swap filenames.

       Note that if "-" is specified as the directory to edit, it reads a
       list of filenames from stdin and displays those for editing.
       Alternatively, a list of files can be specified on the command line.

Ejemplos


Renombrar archivos selectivamente

Contenido actual del directorio de trabajo:

.
├── bar
├── baz
└── foo

Ejecute vidirname__, cambie el nombre de los nombres de archivo en las líneas que contienen los nombres de archivo que desea cambiar de nombre; golpear CTRL+O y CTRL+X:

screenshot3

.
├── bar.bak
├── baz.old
└── foo.new

Cambiar nombres de archivo selectivamente

Contenido actual del directorio de trabajo:

.
├── bar
├── baz
└── foo

Contenido actual de los archivos del directorio de trabajo:

$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done
- bar:

This is bar

- baz:

This is baz

- foo:

This is foo

$ 

Ejecute vidirname__, cambie los números en las líneas que contienen los nombres de archivo que desea cambiar; golpear CTRL+O y CTRL+X:

screenshot4

.
├── bar
├── baz
└── foo
$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done
- bar:

This is foo

- baz:

This is bar

- foo:

This is baz

$ 

Eliminar archivos selectivamente

Contenido actual del directorio de trabajo:

.
├── bar
├── baz
└── foo

Ejecute vidirname__, elimine las líneas que contienen los archivos que desea eliminar; golpear CTRL+O y CTRL+X:

screenshot2

.
└── baz
3
kos

Estoy usando krename. Es una aplicación GUI. Podía leer etiquetas mp3, etc.

Existe como una aplicación separada, así como una parte de Krusader.

También hay un script rename, que es parte de la instalación estándar de Perl (probablemente lo tenga instalado). Compruébalo con man rename.

2
Adobe