Tengo una carpeta con una serie de archivos llamados:
prefix_1234_567.png
prefix_abcd_efg.png
Me gustaría eliminar por lotes un guión bajo y el contenido medio para que el resultado sea:
prefix_567.png
prefix_efg.png
Relevante pero no completamente explicativo:
_*_
con un espacio en blanco.Respuestas:
En su caso específico, puede usar el siguiente
bash
comando (bash
es el shell predeterminado en macOS):Nota: Si existe la posibilidad de que sus nombres de archivo comiencen con
-
, coloque--
antes de ellos [1]:mv -- "$f" "${f/_*_/_}"
Nota:
echo
se antepone amv
para realizar un ensayo. Elimínelo para realizar un cambio de nombre real.Puede ejecutarlo desde la línea de comandos o usarlo en un script.
"${f/_*_/_}"
es una aplicación debash
expansión de parámetros : el (primer) patrón de coincidencia de subcadenas_*_
se reemplaza con literal_
, cortando efectivamente el token del medio del nombre._*_
es un patrón (una expresión comodín, como también se usa para globbing), no una expresión regular (para aprender sobre patrones, ejecutarman bash
y buscarPattern Matching
).Si tiene que cambiar el nombre de los archivos por lotes con frecuencia, considere instalar una herramienta especializada como la
rename
utilidad basada en Perl . En macOS, puede instalarlo utilizando el popular administrador de paquetes Homebrew de la siguiente manera:Aquí está el equivalente del comando en la parte superior usando
rename
:Nuevamente, este comando realiza una ejecución en seco; eliminar
-n
para realizar el cambio de nombre real.bash
solución,s/.../.../
realiza la sustitución de texto, pero, a diferencia de lo quebash
ocurre con las expresiones regulares verdaderas, se utilizan.[1] El propósito de argumento especial
--
, que está soportado por la mayoría de los servicios públicos, es de señalar que los argumentos posteriores deben ser tratados como los operandos (valores), incluso si se ven como opciones debido a que empiecen con-
, como Jacob C. notas.fuente
.*
->$1
), por ejemplo, cambiar el nombreFoo bar S01E01 biz baz.ext
aS01E01.ext
:rename -n -e 's/.*(S[0-9]{2}E[0-9]{2}).*(\.[a-z]{2,4})/$1$2/' *
echo
para carreras en seco. ¡Gracias por el consejo!brew install rename
Para cambiar el nombre de los archivos, puede utilizar la
rename
utilidad:brew install rename
Por ejemplo, para cambiar una cadena de búsqueda en todos los nombres de archivo en el directorio actual:
Elimine el parámetro 'n' para aplicar los cambios.
Más información:
man rename
fuente
OS X
las versiones deGNU bash
( x86_64-apple-darwin ) no incluyen la utilidad de cambio de nombre.brew install rename
rename -vs GLYCOPHORIN GLYCC *
y ahora es cambiar el nombre de archivos de forma automática 450+. Y super rápido también.Podrías usar sed:
resultado:
* para hacer un ensayo primero, reemplace
mv
al final conecho
Explicación:
fuente
ls * | xargs -I % bash -c 'echo mv "%" "$(sed 's@_.*_@_@' <<<"%")"'
(eliminarecho
para cambiar el nombre).Tenía un lote de archivos que se veía así: be90-01.png y necesitaba cambiar el guión para subrayar. Usé esto, que funcionó bien:
fuente
puede instalar el
rename
comando usandobrew
. solo hazlobrew install rename
y úsalo.fuente
Utilizando
mmv
fuente
sudo apt-get install mmv
.brew install mmv
.prueba esto
Aquí hay otra forma:
fuente