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
renamese instala fácilmente conbrew install rename.--no-actbandera es en su--nonolugar. 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 filey 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,-typey-execbanderas a manpages.ubuntu.com/manpages/bionic/man1/find.1.html#expression . (find --helpno es particularmente útil para este comando). TL; DR:-inamecoincide con un patrón que no distingue entre mayúsculas y minúsculas;-type fcoincide con "archivos normales"; y-execejecuta 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.