Script para mover archivos con el nombre de su primera letra

2

Tengo muchos archivos (1000+) en un solo directorio y me gustaría organizarlos en subdirectorios, de acuerdo con su primera letra. Así que tengo 200 archivos que comienzan con A, y me gustaría moverlos al subdirectorio "A", luego a todos los archivos "B", etc.

¿Cómo hacer?

    
pregunta stighy 28.05.2012 - 15:32

3 respuestas

5

En un terminal: cd en el directorio en cuestión, luego

for x in 'ls -1 | sed -e 's/^\(.\).*//' | sort -u'; do
mkdir $x && mv -i ${x}?* $x
done

Esto supone que ningún archivo tiene un solo nombre de carácter antes de comenzar. Si lo hacen, puede apartarlos antes de ejecutar el procedimiento anterior:

mkdir singles && mv ? singles

y luego, muévelos a sus destinos correspondientes en la parte posterior.

Editar: Vea los comentarios a continuación para algunas advertencias. Si tiene problemas con líneas de comando demasiado largas, puede reemplazar la segunda línea por

mkdir $x && find . -maxdepth 1 -name "${x}?*" -exec mv -i {} $x \;
    
respondido por el Harald Hanche-Olsen 28.05.2012 - 16:00
2

Aquí hay una línea de Ruby:

ruby -e 'require "FileUtils"; Dir["*"].each { |f| next if File.directory?(f); d = f[0]; Dir.mkdir d rescue nil; FileUtils.mv(f,d) }'

Básicamente, itera sobre todos los archivos, crea los directorios si es posible y luego los mueve a ellos.

Simplemente ejecuta esta línea desde el directorio.

    
respondido por el slhck 28.05.2012 - 23:51
0

Esto también funcionaría si los nombres de archivo comiencen con caracteres multibyte (como Ä o あ):

ls | iconv -f utf8-mac -t utf-8 | LC_CTYPE=UTF-8 cut -c1 | uniq | while IFS= read -r l; do
  f=("$l"*)
  mkdir -- "$l"
  mv -- "${f[@]}" "$l"
done

iconv -f utf8-mac -t utf-8 convierte el texto de una forma parcialmente descompuesta utilizada por HFS + a la forma precompuesta. Consulte Codificaciones de texto en VFS o esta pregunta . LC_CTYPE=UTF-8 hace que cut -c1 considere caracteres multibyte como caracteres únicos.

    
respondido por el user495470 19.06.2013 - 21:53

Lea otras preguntas en las etiquetas