
Hola, quiero eliminar todas las barras diagonales de todos mis archivos, pero hacerlo de forma recursiva para cada directorio de un directorio principal.
¿Cómo tengo que modificar este script, que no funciona de forma recursiva?
for f in "$1"/*; do
dir="$(dirname "$f")"
file="$(basename "$f")"
mv -- "$f" "${dir}/${file//[^_-0-9A-Za-z.]}"
done
o mejor, solo quiero reemplazar una barra diagonal en los nombres de archivos, pero ¿esto para cada subcarpeta de la carpeta principal?
saludo max
Respuesta1
En la capa BSD, una barra diagonal es el separador de ruta. Cuando encuentra un nombre de archivo con una barra diagonal, el kernel traduce la barra diagonal /
a dos puntos :
. Por lo tanto, un nombre de archivo en la aplicación Finder puede verse así, foo/bar
pero en la capa BSD parece foo:bar
.
Entonces, para recorrer el árbol de directorios, utilice find
para ubicar archivos con :
su nombre. Luego, use una secuencia de comandos en línea para -execdir
eliminar los dos puntos (barras diagonales en la aplicación del buscador) de los nombres de los archivos.
find . -type f -name '*:*' -execdir bash -c ' for file
do
echo mv -- "${file}" "${file//:}"
done' sh {} \;
Esto solo enumerará el mv
comando y los operandos. Si cree que el resultado le dará los resultados deseados, elimine el archivo echo
.