1 votos

Ordenar 80.412 archivos en carpetas según el nombre que empieza por

Situación:

  • una carpeta con 80.412 archivos
  • todos los archivos nombrados con CamelCase, algunos tienen un guión (-) que separa la primera palabra
  • Los archivos se pueden agrupar si comienzan con la misma palabra o letras (por ejemplo, "ClientslistRebecca..." y "Clientslist-Adam...")
  • ningún nombre de archivo comienza con un número
  • muy pocos archivos comienzan con una única palabra

Necesito tomar la primera palabra, encontrar todos los archivos que comienzan con esa palabra y crear una carpeta con ese nombre. Repite la operación con todos los archivos.

La principal complicación es que a veces un nombre empieza con varias mayúsculas, seguido de una palabra que también empieza con mayúscula (es decir, "AWDRebecca..."). No estoy seguro de cómo resolverlo, pero me parece bien hacer una limpieza manual después si tengo carpetas con "AWDRebecca", "AWDReports", "AWDNovember", pero tener una carpeta "A" lo hará más difícil.

1voto

Un fragmento de shell como

for i in *; do
  case "$i" in
    [A-Z][A-Z]*) # $i has several leading caps
        dir=$(sed -E -e 's|([A-Z]+)[A-Z].*|\1|' <<< "$i")
        echo mkdir -p "$dir"
        echo mv "$i" "$dir"/
        ;;
    [A-Z][a-z]*) # $i has one leading cap
        dir=$(sed -E -e 's|([A-Z][a-z]+).*|\1|' <<< "$i")
        echo mkdir -p "$dir"
        echo mv "$i" "$dir"/
        ;;
    *) echo "Huh: $i"
       ;;
  esac
done

debería funcionar. Tal como está escrito, sólo imprimirá los comandos en la pantalla. Si se ven sensatos, elimine los cuatro echo antes de mkdir / mv .

Además, para 80'000 archivos, el for i in * parte puede fallar. Si este es el caso, ejecútelo en lotes con for i in [A-E]* , for i in [F-K]* etc.

P.D.: Fallará para los archivos con nombre ALLCAPS. Si lo hace, por favor comente para que pueda añadir otra regla.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X