1 votes

Trier 80 412 fichiers dans des dossiers sur la base du nom commençant par

Situation :

  • un dossier contenant 80 412 fichiers
  • tous les fichiers sont nommés avec CamelCase, certains ont un tiret (-) séparant le premier mot
  • les fichiers peuvent être regroupés en commençant par le même mot ou les mêmes lettres (par exemple, "ClientslistRebecca..." et "Clientslist-Adam...").
  • aucun nom de fichier ne commence par un chiffre
  • très peu de fichiers commencent par un mot unique

Je dois prendre le premier mot, trouver tous les fichiers qui commencent par ce mot, et créer un dossier nommé avec ce mot. Répétez l'opération pour tous les fichiers.

La principale complication est que, parfois, un nom commence par plusieurs majuscules, suivies d'un mot qui commence également par une majuscule (par exemple, "AWDRebecca..."). Je ne sais pas comment résoudre ce problème, mais je suis d'accord pour faire un nettoyage manuel par la suite si j'ai des dossiers avec "AWDRebecca", "AWDReports", "AWDNovember", mais avoir un dossier "A" rendra les choses plus difficiles.

1 votes

Cela nécessite probablement une solution de script. Qu'avez-vous essayé jusqu'à présent ?

0 votes

De plus, je suppose que les fichiers commençant par "AWDRebecca", "AWDReports", "AWDNovember" devraient se retrouver dans un dossier appelé "AWD", non ?

0 votes

Je viens de commencer cette tâche, j'utilise des flux de travail Automator avec Run Shell script pour la plupart des automatisations.

1voto

nohillside Points 82672

Un extrait de l'interpréteur de commandes comme

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

devrait fonctionner. Tel qu'il est écrit, il imprimera simplement les commandes à l'écran. S'il vous semble raisonnable, supprimez les quatre echo avant mkdir / mv .

De même, pour 80'000 dossiers, le for i in * peut échouer. Si c'est le cas, exécutez-la par lots avec for i in [A-E]* , for i in [F-K]* etc.

PS : Il échouera pour les fichiers avec un nom ALLCAPS. Si vous en avez, veuillez commenter afin que je puisse ajouter une autre règle.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X