¿Cómo eliminar el carácter de espacio (espacios en blanco) del final de los nombres de archivos y carpetas?

3

El problema con mac es que permite caracteres de espacio al final del archivo o carpeta. Si este archivo o carpeta con caracteres de espacio en el extremo se está copiando a FTP usando Filezilla o Dropbox, entonces Mac crea carpetas con "Foldername_WhiteSpaceConflict" Para deshacerse de este problema, todos los archivos y carpetas con caracteres de espacio deben ser renombrados sin caracteres de espacio. ¿Qué solución podría ser la mejor usando terminal o algún programa?

    
pregunta Kangarooo 23.02.2015 - 14:31

4 respuestas

3

Aquí está la secuencia de comandos para buscar y eliminar el espacio final de los archivos y direcciones:

#!/bin/bash                                                                                                                                                                                                        

IFS=$'\n'
for file in $(find -d . -name "* ")
do
  target_name=$(echo "$file" | sed 's/[ \t]*$//')
  if [ "$file" != "$target_name" ]; then
      if [ -e "$target_name" ]; then
          echo "WARNING: $target_name already exists, file not renamed"
      else
          echo "Move $file to $target_name"
          mv "$file" "$target_name"
      fi
  fi
done
    
respondido por el Mateusz Szlosek 23.02.2015 - 15:09
1

Hay una aplicación para Mac llamada ' Name Mangler ', esto hará todo lo que pueda hacer en un archivo / nombre de la carpeta, e incluso puede crear su propio código y utilizarlo en la aplicación. Hay una versión de prueba gratuita que le ofrece 4 intentos ilimitados, y puede revertir los nombres si comete un error.

    
respondido por el Dan Gallant 15.06.2017 - 18:59
0

Algo como esto debería funcionar:

ruby -e "Dir.glob('* ').each { |name| File.rename name, name.chomp(' ') }"

Esto eliminará los espacios finales de cada archivo / directorio en el pwd.

    
respondido por el Joris Vanhecke 23.02.2015 - 15:09
0

Tuve que arreglar el script un poco más. Para los archivos o carpetas que terminan en la letra 't', también eliminaría esa letra. Y la llamada para verificar si el archivo existe no funcionaba correctamente, así que cambié "target_name" a $ target_name y ahora funciona.

#!/bin/bash                                                                                                                                                                                                        

IFS=$'\n'
for file in $(find -d . -name "* ")
do
  target_name=$(echo "$file" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
  if [ "$file" != "$target_name" ]; then
      if [ -e $target_name ]; then
          echo "WARNING: $target_name already exists, file not renamed"
      else
          echo "Move $file to $target_name"
          mv "$file" "$target_name"
      fi
  fi
done
    
respondido por el Devin Stagner 16.06.2016 - 01:20

Lea otras preguntas en las etiquetas