it-swarm-es.tech

Cambiar el nombre de los archivos por lotes

Tengo un directorio lleno de imágenes:

image0001.png
image0002.png
image0003.png
...

Y me gustaría que una línea les cambie el nombre a (digamos).

0001.png
0002.png
0003.png
...

¿Cómo hago esto?

157
Internet man

Si está utilizando Bash u otro Shell compatible con POSIX:

for f in *.png; do
    mv -- "$f" "${f#image}"
done
110
W_Whalley

En Debian y derivados, el rename de Perl funciona de manera similar a sed de esta manera:

  rename -v 's/image//' *.png

También está el rename de util-linux que funciona así, en su lugar:

  rename image '' *.png
113
Internet man

zmv

Zsh Shell tiene un poderoso comando de cambio de nombre de lote llamado zmv.

Primero debe habilitar el comando zmv de la siguiente manera (esto puede ir a su ~/.zshrc).

autoload zmv

La sintaxis básica es zmv PATTERN REPLACEMENT. El patrón es una expresión glob de Shell. Las partes del patrón pueden estar rodeadas de paréntesis. El texto de reemplazo puede contener $1, $2, etc. para referirse al enésimo grupo entre paréntesis en el patrón. Por ejemplo:

zmv 'image(*.png)' '$1'

También puede pedirle a zsh que defina automáticamente $1, $2, etc. para que coincidan los caracteres comodín en el patrón:

zmv -w 'image*.png' '$1.png'

Normalmente utilizo la utilidad Nice and simple mmv ( man page ) para este caso de uso:

$ mmv "image*.png" "#1.png"

realizará tu tarea.

Los #1 en el patrón de destino se sustituirá con lo que coincida con el comodín en el patrón de origen. Esto también funciona para varios comodines y se puede usar, por ejemplo, para cambiar el orden de las partes de los nombres de archivo. También puede hacer cosas más complicadas fácilmente, como convertir letras minúsculas a mayúsculas.

Asegúrese de proteger los patrones del Shell citando.

34
Marcel Stimberg

POSIX sh para bucle

tiliza sed para renombrar

for i in image*jpg
do 
  mv -v "$i" "$(echo "$i" | sed -e 's/^\.\/image//' - )"
done
10
X Tian

Perl me gusta así que:

Perl -nlE '$old=$_; s/image//; qx(mv $old $_)'

También puede usar el mismo patrón para otras tareas, como copiar los archivos a otro directorio:

Perl -nlE '$old=$_; s(image)(/path/to/new/dir/); qx(mv $old $_)'
6
gvkv

qmv

El comando qmv de renameutils abre un editor que muestra una lista de nombres de archivo con dos columnas, separadas por una pestaña. Cada fila muestra uno de los nombres de archivo, el mismo en ambas columnas. La columna de la derecha representa los nuevos nombres de los archivos.
Para hacer cambios, edite los nombres en el lado derecho. En este ejemplo, :%s/... o el modo de bloqueo visual son útiles.

Nombres de archivo en su editor

$ qmv *.png

En editor:

image0001.png           image0001.png
image0002.png           image0002.png
image0003.png           image0003.png         
~                                             
~                                             
~                                             
~                                             
"/tmp/user/1000/qmvxWyVMs" 3L, 93C

Editar nombres en la columna derecha:
(Eliminando el prefijo image de todas las líneas usando el modo de bloque visual)

image0001.png           0001.png
image0002.png           0002.png
image0003.png           0003.png         
~                                             
~                                             
~                                             
~                                             
:wq

Registro de cambio de nombre:

image0001.png -> 0001.png
image0002.png -> 0002.png
image0003.png -> 0003.png

(por ejemplo, Ubuntu: apt-get install renameutils)

6
Volker Siegel

recursivo

fácil selección de archivos de imagen * png recurrente, y supone que no es necesario tratar con nueva línea en los nombres de archivo

find . -name "image*.png" | while read f; do mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"; done

Seguro, puede ocuparse de espacios, nuevas líneas, barras invertidas y cualquier otra cosa:

find . -name "image*.png" | while IFS= read -r f; do 
   mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"; 
done
3
X Tian

Usando expansión de llave de Shell :

for N in {0001..1000}; do mv "{image,}$N.png"; done
2
αғsнιη

Pruebe brename ( https://github.com/shenwei356/brename ), una práctica herramienta de línea de comandos multiplataforma para renombrar archivos/directorios por lotes de manera segura a través de expresiones regulares (compatible con Windows, Linux y OS X ).

@ patrickDurusa dijo:

Linux tiene una variedad de opciones de cambio de nombre de archivos por lotes, pero no vi ninguna deficiencia en brename que me llamó la atención.

Caracteristicas:

  • Multiplataforma . Compatible con Windows, Mac OS X y Linux.
  • Seguro . Por comprobando posibles conflictos y errores.
  • Filtrado de archivos . Apoyo a la inclusión y exclusión de archivos a través de expresiones regulares. No es necesario ejecutar comandos como find ./ -name "*.html" -exec CMD.
  • Cambio de nombre de subcoincidencia con el valor correspondiente a través del archivo clave-valor .
  • Renombrar a través de un entero ascendente .
  • Renombrar recursivamente archivos y directorios .
  • Soporte de funcionamiento en seco .
  • Salida colorida .

Mando:

$ brename -f .png -p image
[INFO] checking: [ ok ] 'image0001.png' -> '0001.png'
[INFO] checking: [ ok ] 'image0002.png' -> '0002.png'
[INFO] checking: [ ok ] 'image0003.png' -> '0003.png'
[INFO] 3 path(s) to be renamed
[INFO] renamed: 'image0001.png' -> '0001.png'
[INFO] renamed: 'image0002.png' -> '0002.png'
[INFO] renamed: 'image0003.png' -> '0003.png'
[INFO] 3 path(s) renamed
1
Wei Shen

POSIX sh usando un ciclo while

Lectura de nombres del comando find.

find . -maxdepth 1 -type f -name 'image*png' | while IFS= read -r f; do
  mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"
done

Lectura de nombres de un archivo

while IFS= read -r f; do mv -v "$f" "$(echo "$f"|sed -e 's/^\.\/image//' - )"; done < flist
1
X Tian

Para Windows y Linux , esto script Perl servirá; en este caso:

$ rnm -l 's/^image//' '*.png'

El script podría ejecutarse recursivamente bajo directorios e incluso anteponer un recuento a todos ellos:

$ rnm -r 's/^/$counter./' '/\.png$/'

Los caracteres UTF-8 también se tratan correctamente, tanto en Windows como en Linux.

1
circulosmeos

Puede usar esta herramienta: rnm ( página web )

Para su caso, el comando sería:

rnm -rs '/^image//' *.png

Puede encontrar más ejemplos/documentos aquí .

0
Jahid