2 votes

Automatiser le déplacement et le renommage de fichiers

J'ai des fichiers nichés dans plusieurs sous-dossiers. Je veux déplacer ces fichiers, un dossier plus haut dans la structure du dossier et renommer les fichiers selon le nouveau dossier parent. J'aurai besoin que cela soit automatisé avec un script.

Logique d'exemple

  1. Trouver dossier racine
  2. Obtenir le contenu des fichiers de sous-dossier de sous-dossier.
  3. Déplacer les fichiers vers son dossier parent (également appelé dossier 'Pièces jointes')
  4. Renommer les fichiers avec le nom de son dossier parent actuel.
  5. Supprimer le sous-dossier vide
  6. Répéter l'action ci-dessus des dossiers du dossier racine jusqu'à ce que ce soit terminé.

Détails du renommage

Le dossier Pièces jointes peut contenir un à plusieurs fichiers de .png ou .jpg. Par exemple, le dossier Pièces jointes pourrait contenir Apple.png et Dog-house.jpg. Si ces fichiers sont déplacés et renommés, je m'attends à ce que le nom du fichier soit quelque chose comme ceci MCP##-##### - abc.png et MCP##-##### - abc.jpg.

S'il y a plus d'un fichier avec le même type de fichier, alors le nommage devrait être quelque chose comme ceci MCP##-##### - abc.png et MCP##-##### - abc (1).png

Structure de dossier exemple

entrer la description de l'image ici

Résultat souhaité

[![entrer la description de l'image ici](https://i.stack.imgur.com/rZ92q.png)

Je suppose que cela pourrait nécessiter une automatisation avec un script mais je ne sais pas comment le faire. Est-ce que quelqu'un peut m'aider?

2voto

user3439894 Points 52496

Voici un exemple Automator workflow qui atteint l'objectif défini de votre question en utilisant sa structure de dossiers hiérarchique :

NOTE : Bien que le code bash exemple utilisé dans l'Action Exécuter un script Shell du workflow se soit terminé avec succès, il est de la responsabilité de l'utilisateur de s'assurer que des sauvegardes appropriées existent avant de l'utiliser. Je recommanderais même de faire une petite copie de test de la structure de dossier hiérarchique cible avant d'exécuter le workflow sur l'original.

Pour tester ce workflow, la structure de dossier hiérarchique suivante avec ses fichiers a été créée :

$ tree ./Applications
./Applications
 MCP19-00633 - Sport and Play at Br
   Attachments
       barfoo.png
       filename.jpg
       filename.png
       foobar.jpg
 MCP19-00753 - Active Nabiac
   Attachments
       barfoo.png
       filename.jpg
       filename.png
       foobar.jpg
 MCP19-00824 - A Family Friendly Ve
     Attachments
         barfoo.jpg
         barfoo.png
         filename.jpg
         filename.png
         foobar.jpg
         namefile.jpg
         namefile.png

6 répertoires, 15 fichiers
$ 

Les résultats de l'Automator workflow exécuté sur la cible ci-dessus :

$ tree ./Applications
./Applications
 MCP19-00633 - Sport and Play at Br
   MCP19-00633 - Sport and Play at Br (1).jpg
   MCP19-00633 - Sport and Play at Br (1).png
   MCP19-00633 - Sport and Play at Br.jpg
   MCP19-00633 - Sport and Play at Br.png
 MCP19-00753 - Active Nabiac
   MCP19-00753 - Active Nabiac (1).jpg
   MCP19-00753 - Active Nabiac (1).png
   MCP19-00753 - Active Nabiac.jpg
   MCP19-00753 - Active Nabiac.png
 MCP19-00824 - A Family Friendly Ve
     MCP19-00824 - A Family Friendly Ve (1).jpg
     MCP19-00824 - A Family Friendly Ve (1).png
     MCP19-00824 - A Family Friendly Ve (2).jpg
     MCP19-00824 - A Family Friendly Ve (2).png
     MCP19-00824 - A Family Friendly Ve (3).jpg
     MCP19-00824 - A Family Friendly Ve.jpg
     MCP19-00824 - A Family Friendly Ve.png

3 répertoires, 15 fichiers
$ 

L'image ci-dessous de l'exemple Automator workflow contient les actions utilisées et leurs paramètres spécifiques utilisés à partir de leurs valeurs par défaut. Assurez-vous de correspondre aux paramètres affichés dans l'image. En particulier, l'Action Obtenir le contenu du dossier a la case à cocher [] Répéter pour chaque sous-dossier trouvé cochée, et l'Action Exécuter un script Shell a Transmettre l'entrée : défini sur comme arguments.

Image du workflow Automator

Exemple bash code :

for f in "$@"; do

    [[ -f $f ]] || continue

        ext="${f##*.}"
        move_to_dir="$(dirname "$(dirname "$f")")"
        filename="$(basename "$move_to_dir")"

        cd "$move_to_dir" || exit

        if [[ ! -e ${filename}.${ext} ]]; then
            mv "$f" "${filename}.${ext}"
        else
            n=1
            for i in "${filename}" *".${ext}"; do
                if [[ "${filename} (${n}).${ext}" == "$i" ]]; then
                    n=$(( n + 1 ))
                fi
            done
            mv "$f" "${filename} (${n}).${ext}"
        fi
done

for d in "$@"; do
    [[ -d $d ]] || continue
    [[ $(basename "$d") == Attachments ]] || continue
    rmdir "$d"
done

Note : Le code bash exemple est simplement un exemple et ne contient que peu de gestion des erreurs, et a été vérifié en utilisant ShellCheck. Cependant, il peut ne pas contenir toute la gestion des erreurs appropriée nécessaire ou voulue. Il incombe à l'utilisateur d'ajouter toute gestion des erreurs selon ce qui est approprié, nécessaire ou souhaité.

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