
Tengo muchas carpetas y subcarpetas con archivos con nombre. 1. Introduction--- [ FreeCourseWeb.com ] ---.mp4
Quiero cambiar el nombre de todos los archivos de forma recursiva (carpetas y subcarpetas) para simplemente 1. Introduction.mp4
suprimir la subcadena --- [ FreeCourseWeb.com ] ---
.
Respuesta1
Suponiendo que desea cambiar el nombre de todos los archivos que tienen un dígito al comienzo de su nombre, contienen la subcadena ---
dos veces, seguida inmediatamente por .mp4
al final del nombre. Además, suponiendo que desee eliminar el bit entre las dos ---
subcadenas, incluidas estas subcadenas:
find . -type f -name '[[:digit:]]*---*---.mp4' -exec sh -c '
for pathname do
mv -i "$pathname" "${pathname%---*---.mp4}.mp4"
done' sh {} +
Esto encuentra todos los archivos normales con nombres que coinciden con el patrón dado, en o debajo del directorio actual, y luego elimina la cadena de sufijo que coincide ---*---.mp4
y .mp4
vuelve a agregar el sufijo.
Sin usar find
(en bash
):
shopt -s globstar nullglob dotglob
for pathname in ./**/[[:digit:]]*---*---.mp4; do
[[ ! -f $pathname ]] && continue
mv -i "$pathname" "${pathname%---*---.mp4}.mp4"
done
Esto es esencialmente lo mismo que el find
comando, pero también cambiará el nombre de los enlaces simbólicos. Las tres opciones de shell que se configuran al principio habilitan el **
patrón global utilizado para hacer coincidir recursivamente en subdirectorios ( globstar
), garantiza que los patrones que no coinciden se eliminen en lugar de mantenerse sin expandir ( nullglob
), y asegura que los patrones globales coincidan con nombres ocultos ( dotglob
).
En el zsh
caparazón:
for pathname in ./**/[[:digit:]]*---*---.mp4(.ND); do
mv -i $pathname ${pathname%---*---.mp4}.mp4
done
Aquí, el punto en el calificador global (.ND)
hace que el patrón anterior solo coincida con archivos normales, while N
y D
actúa como habilitar nullglob
y dotglob
in bash
, pero solo para este patrón específico.
Respuesta2
Usando la rename
herramienta del util-linux
paquete (a veces denominada rename.ul
) y find
:
find . -type f -name '*--- \[ FreeCourseWeb.com \] ---.mp4'\
-exec rename -i -- '--- [ FreeCourseWeb.com ] ---' '' {} \;
La opción -i
solicita permiso para sobrescribir archivos existentes.
Usando el script Perl de Larry Wall rename
y find
:
find . -type f -name '*--- \[ FreeCourseWeb.com \] ---.mp4'\
-exec rename 's/--- \[ FreeCourseWeb.com \] ---//' {} \;
Los archivos existentes no se sobrescriben de forma predeterminada a menos que se utilice la opción -f
/ . En su lugar --force
, verá un mensaje de error ... already exists
.