bash – Eliminar todos los caracteres ilegales de todos los nombres de archivo en una carpeta y subcarpetas determinadas

Pregunta:

Sé que esto fue básicamente respondido y el automatizador con el script de shell (Sanitize Filenames) funciona muy bien, pero también lo necesito para hacer todas las subcarpetas. Y si es posible, recorte el nombre del archivo a 50 caracteres manteniendo la extensión del archivo. Encontré una línea de código bash que truncó el archivo, pero también eliminó la extensión y eso no funciona bien al transferir estos archivos de Mac a Windows.

El guión tal como está es este

for f in "$1"/*; do
dir=$(dirname "$f")
file=$(basename "$f")
mv "$f" "${dir}/${file//[[:cntrl:]\\\/:*?\"<>|]/_}" 
done 

No me opongo a usar Applecript en automator para completar esta tarea.

Respuesta:

Puede usar find . Las opciones en OSX / Darwin's find son ligeramente diferentes a las de otras variantes * nix, por lo que es posible que algunas de estas funciones no estén disponibles para usted, pero obtendrá la esencia y podrá jugar con las opciones que tiene disponibles:

find -regextype posix-extended -regex '.*\/[^\/]*[[:cntrl:]\\:*?"<>|].*' -print \
  -exec mv "{}" "$(echo "{}" | perl -ane 'chomp; s/[[:cntrl:]\\:*?"<>|]//g; print' -)"

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım