1 votes

Comment faire pour que l'automate agisse sur plusieurs dossiers ?

J'ai un certain nombre de dossiers au format suivant :

Folder_Name_1
    Converted_Files
        file1.aiff
        file2.aiff
             :
             :
        fileX.aiff
Folder_Name_2
    Converted_Files
        file1.aiff
        file2.aiff
             :
             :
        fileX.aiff
  :
  :
Folder_Name_nnn
    Converted_Files
        file1.aiff
        file2.aiff
             :
             :
        fileX.aiff

J'ai écrit un bash script qui va déplacer file1.aiff, file2.aiff, etc. d'un niveau supérieur dans le Dossier_Nom_n et ensuite supprimer "Fichiers_convertis".

Automator n'agira que sur un seul Nom_de_Dossier_n à la fois.

Ce que je veulent pour que l'automate agisse sur le Dossier_Nom_1, puis le Dossier_Nom_2, jusqu'au Dossier_Nom_n.

Voici mon automate script : Automator Flow

Voici le bash script comme texte :

cd "$1"
cd Converted_Files
mv *.aiff ..
rm .DS_Store
cd ..
rm -r Converted_Files

Merci.

-2voto

user3439894 Points 52496

Comme vous n'étiez pas trop clair sur le type de Automator flux de travail que vous avez créé, je vais me concentrer principalement sur les code que vous utilisez dans le Exécuter le Shell script action .

L'exemple suivant Automator flux de travail a été créé par Fichier > Nouveau > Flux de travail sur Automator avec un Obtenez les articles sélectionnés de Finder action et un Exécuter le Shell script action ajouté à celui-ci, avec le paramètres comme le montre l'image ci-dessous.

Les tests ont été effectués avec un sélection contenant à la fois fichiers y dossiers qui comprenait à la fois les cibles réelles de la Automator flux de travail 's Exécuter le Shell script action et d'autres comme s'ils avaient été sélectionnés par hasard, si vous voulez. Avec les éléments suivants fichiers y dossiers sélectionné dans Finder :

.
 Archive.zip
 Folder_Name_1
 Folder_Name_2
 Folder_Name_3
 Foobar
 Foobar.txt

Les éléments suivants vue arborescente étendue de la sélection fichiers y dossiers montré ci-dessus, contient évidemment les deux fichiers qui ne sont pas les véritables cibles de la flux de travail ainsi qu'un dossier ne contenant pas le contenu attendu. Ceci a été fait pour tester que le exemple bash code fonctionne comme prévu.

.
 Archive.zip
 Folder_Name_1
    Converted_Files
        file1.aiff
        file2.aiff
 Folder_Name_2
    Converted_Files
        file1.aiff
        file2.aiff
 Folder_Name_3
    Converted_Files
        file1.aiff
        file2.aiff
 Foobar
    Barfoo
        More Foobar.txt
 Foobar.txt

8 directories, 9 files

Après avoir exécuté le flux de travail de Automator sur les fichiers y dossiers sur Finder Le texte suivant montre la nouvelle vue arborescente étendue de la sélection originale vue arborescente étendue :

.
 Archive.zip
 Folder_Name_1
    file1.aiff
    file2.aiff
 Folder_Name_2
    file1.aiff
    file2.aiff
 Folder_Name_3
    file1.aiff
    file2.aiff
 Foobar
    Barfoo
        More Foobar.txt
 Foobar.txt

5 directories, 9 files

Comme vous pouvez le voir dans l'image ci-dessous, et en conjonction avec les informations présentées ci-dessus, la Automator flux de travail s'est achevé sans erreur et n'a traité que les dossiers cibles appropriés, même si d'autres dossiers non cibles ont été envoyés à l'équipe de l Exécuter le Shell script action comme indiqué ci-dessus.

Notez également que des tests supplémentaires ont été effectués avec les dossiers cibles /Folder_Name_N/Converted_Files/ contenant des non .aiff pour s'assurer qu'à part le déplacement .aiff le contenu n'a pas dû être explicitement supprimé, par ex. rm .DS_Store n'était pas nécessaire, car le -r option de la rm commande se tenter de supprimer la hiérarchie de fichiers enracinée dans chaque argument de fichier . Vous pouvez également envisager d'utiliser l'option -f option aussi. (Je l'ai déjà ajouté à mon exemple bash code alors supprimez-la si vous ne voulez pas l'utiliser. option .)

Automator Workflow Image

Exemple bash code pour le Exécuter le Shell script action :

for d in "$@"; do
    [ -d "$d" ] || continue 
    if [ -d "$d/Converted_Files" ]; then
        cd "$d/Converted_Files" || exit 
        for f in *.aiff; do
            mv "$f" ..
        done
    fi
    cd ..
    rm -rf "Converted_Files"
done

Notez que le exemple bash code n'est que cela, et peut ne pas contenir toute la gestion d'erreur qui peut être appropriée/nécessaire/souhaitée. Il incombe toujours à l'utilisateur d'implémenter toute gestion d'erreur appropriée/nécessaire/souhaitée avec n'importe quel système de gestion d'erreurs. code que l'on choisit d'utiliser.

Les tests ont été effectués sous MacOS High Sierra 10.13.6.

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