0 votes

Automator peut-il répartir un grand nombre de fichiers dans des sous-dossiers comptés ?

J'aimerais créer une application Automator qui compte les fichiers dans le dossier hôte, crée un sous-dossier numéroté nommé " [nom du dossier hôte] [compteur]. ", déplace au maximum 128 fichiers du DossierHôte par ordre séquentiel dans ce nouveau sous-dossier, et boucle jusqu'à ce que tous les fichiers du DossierHôte soient triés dans les sous-dossiers (c'est-à-dire que le dernier sous-dossier contiendra moins de 128 fichiers). Avant l'exécution du workflow, le dossier hôte ne contiendra toujours que des fichiers, sans sous-dossiers.

Voici le résultat souhaité de mon flux de travail idéal en utilisant comme exemple un dossier arbitraire contenant un nombre arbitraire de fichiers, également nommés de manière arbitraire. (Notez que je n'ai pas besoin que le flux de travail renomme les fichiers) :

Un dossier nommé Beans contient 1027 fichiers, les fichiers Legume 0001 à Legume 1027. Mon application Automator reçoit le dossier Beans en entrée. Une fois le flux de travail exécuté, le dossier Beans contient maintenant 9 sous-dossiers, nommés Beans 1, Beans 2, Beans 3, et ainsi de suite jusqu'à Beans 9.

Le sous-dossier Beans 1 contient les fichiers Legume 0001, Legume 0002, Legume 0003, et ainsi de suite jusqu'à Legume 0128. Le sous-dossier Beans 2 contient les fichiers Legume 0129 à Legume 0256. En d'autres termes, chaque sous-dossier contient 128 des fichiers nommés Legume **** dans un ordre séquentiel. La seule exception est le dernier sous-dossier, Beans 9, qui ne contient que 3 fichiers, les fichiers Legume 1025, Legume 1026 et Legume 1027.

1voto

user3439894 Points 52496

Cela devrait faire ce que vous avez demandé. A bash script est filesPerSubDir="128" si vous voulez un compte de fichiers différent par sous-répertoire dans le répertoire parent qui est passé à l'exécution du shell script. action .

Ajouter un Shell d'exécution script action à votre application/service/flux de travail Automator et définissez les paramètres suivants Shell: /bin/bash y Pass input: as arguments . Supprimez l'option par défaut code et ensuite copier et coller le code ci-dessous dans le Shell d'exécution d'Automator script action .


#!/bin/bash

filesPerSubDir="128"

for argument in "$@"; do
    if [[ -d $argument ]]; then
        cd "$argument" || exit 1
        dirName="$(basename "$argument")"
        fileCount="$(find . -maxdepth 1 -flags nohidden -type f ! -iname ".*" | awk 'END{print NR}')"
        subDirCount="$(( fileCount / filesPerSubDir + 1 ))"
        for (( i = 1; i < subDirCount+1; i++ )); do
            find . -maxdepth 1 -flags nohidden -type f ! -iname ".*" | head -$filesPerSubDir > .moveList
            if [[ -s  .moveList ]]; then
                mkdir "$dirName $i"
                while IFS= read -r file; do
                    mv "$file" "$dirName $i"
                done < .moveList
            fi
        done
        rm .moveList
    fi
done

L'image ci-dessous montre un test de l code et le flux de travail s'est terminé avec succès, comme l'indiquent les cercles verts avec la marque de contrôle. Ceci n'est qu'un exemple de la manière d'implémenter l'exécution du Shell script. action il peut être fait de nombreuses façons, mais vous devez juste choisir la méthode que vous voulez pour lui passer les dossiers dans le Finder, le reste est fait par l'outil de gestion des dossiers. script .

Automator window


L'image ci-dessous montre le code avec une mise en évidence syntaxique et est inclus car il aide à la lecture du texte. code (surtout lorsque le code n'est pas commenté, désolé je n'ai pas le temps pour le moment).

syntactical highlight code


Note : Le site bash script n'est pas codé pour gérer un saut de ligne incorporé dans le nom d'un objet du système de fichiers, qui, selon l'OMI, n'a pas sa place là en premier lieu ! N'hésitez pas à modifier ce code en fonction de vos besoins, en ajoutant/modifiant code et ou une vérification supplémentaire des erreurs si nécessaire. En outre, il ne s'agit en aucun cas de la seule manière de code le site script pour gérer ce que vous voulez automatiser, mais c'est ce que j'ai fait pour vous fournir quelque chose. Si vous avez des questions, n'hésitez pas à les poser.

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