Necesito cambiar el nombre de lo siguiente:
file_001_loremipsum.png
file_002_dolor.png
file_003_sit.png
file_004_amet.png
file_105_randomness.png
dentro
upl_loremipsum.png
upl_dolor.png
upl_sit.png
upl_amet.png
upl_randomness.png
¿Cómo hago que suceda con solo una línea simple de comando de terminal?
rename
regex
batch-rename
Unamata Sanatarai
fuente
fuente
Respuestas:
La solución al ejemplo anterior, usando rename :
Uso:
De
man rename
:rename PUEDE tomar regex como argumentos.
Lo que estamos viendo es el contenido entre las comillas simples
'
. Puede colocar expresiones regulares separadas por/
.Fórmula:
s/(1)/(2)/
where(1)
= patrón de búsqueda y(2)
= patrón de reemplazo.Por lo tanto, familiarícese con expresiones regulares y disfrute del cambio de nombre de archivo por lotes basado en patrones.
fuente
rename
se instala fácilmente conbrew install rename
.--no-act
bandera es en su--nono
lugar. Esta respuesta también podría ser un poco más explícita: se[files]
refiere a un archivo de coincidencia de patrón inicial en el directorio actual al que se quiere renombrar (por ejemplo,*
coincide con todo, pero solo en el directorio actual).rename
, que tiene formatorename from to file
y no admite expresiones regulares. En realidad, mi distribución de Linux (Cent OS 7) tiene exactamente esa versión.Si los archivos están en varios directorios, use renombrar después de una búsqueda como:
el -n después de cambiar el nombre es para probar, eliminarlo para continuar! -)
así, asocias encontrar y renombrar poder.
Personalmente, lo usé para cambiar el nombre del encabezado de fuentes .h a .hpp
fuente
-iname
,-type
y-exec
banderas a manpages.ubuntu.com/manpages/bionic/man1/find.1.html#expression . (find --help
no es particularmente útil para este comando). TL; DR:-iname
coincide con un patrón que no distingue entre mayúsculas y minúsculas;-type f
coincide con "archivos normales"; y-exec
ejecuta una expresión hasta que encuentra un carácter;
(punto y coma).¡Esto se puede hacer con poca magia de expansión de parámetros bash!
file_[0-9]*_*;
- El primer patrón se usa para recorrer todos los archivos que comienzan con 'file_anynumber_'${f#file_[0-9]*_}
- El segundo patrónfile_[0-9]*_
se usa en la expansión de parámetros que le dice a bash que elimine 'file_anynumber_' del comienzo de la cadena.Para más información sobre
Parameter expansion
:fuente
[0-9]*
lo que coincidirá con un dígito seguido de cualquier cadena. Probablemente haya una mejor manera de unir solo números, pero no se me ocurre nada sucinto.