OS X elimina la barra diagonal del nombre del archivo

OS X elimina la barra diagonal del nombre del archivo

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/barpero en la capa BSD parece foo:bar.

Entonces, para recorrer el árbol de directorios, utilice findpara ubicar archivos con :su nombre. Luego, use una secuencia de comandos en línea para -execdireliminar 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 mvcomando y los operandos. Si cree que el resultado le dará los resultados deseados, elimine el archivo echo.

información relacionada