1 votes

ou script pour déplacer le sous-sous-répertoire (s'il est trouvé) vers son parent ?

J'ai un répertoire, Movies, qui contient de nombreux sous-répertoires, [MovieName]. Certains de ces sous-répertoires [MovieName] contiennent un sous-répertoire au nom aléatoire contenant un sous-répertoire VIDEO_TS. Si je trouve VIDEO_TS, j'aimerais le déplacer vers le parent [MovieName] du répertoire parent et supprimer le répertoire parent actuel au nom aléatoire. Si je ne trouve pas VIDEO_TS 2 couches plus bas, je veux supprimer [MovieName]. Pour clarifier...

Argo
  |-- ASDFJK
         |-- VIDEO_TS 
Birdcage
  |-- B7YEQ
         |-- [a few files - no VIDEO_TS] 

Puisque Argo a un sous-sous-répertoire VIDEO_TS, déplacez-le vers Argo et supprimez ASDFJK. Puisque Birdcage n'a pas de sous-répertoire VIDEO_TS, supprimez Birdcage. J'ai essayé toutes sortes de choses en utilisant find et -exec avec {} mais au mieux, je n'arrive qu'à déplacer VIDEO_TS d'un niveau (ce qui me laisse une tonne de nettoyage à faire).

0voto

Raffa Points 11919

Le script suivant devrait faire l'affaire. Essayez-le et lorsque vous êtes satisfait des résultats, supprimez les commentaires # pour faire le travail réel.

Sauvegardez votre Movies avant d'exécuter le script dessus. S'il vous plaît...

Pour créer et utiliser le fichier script, veuillez suivre les étapes suivantes :

  1. Créez et modifiez le fichier script dans votre répertoire personnel en exécutant la commande suivante dans le terminal :

    nano ~/my_script.sh

  2. Copiez et collez le code suivant dans l'éditeur changeant /full/path/to/movies/ avec le chemin complet de votre Movies répertoire :

    !/bin/bash

    path="/full/path/to/movies/"

    for directory in $(find "$path" -maxdepth 3 -mindepth 3 -type d -name "VIDEO_TS") do

        parent=$(dirname $(dirname "$directory"))
    
        parent2=$(dirname "$directory")
    
        echo "$directory" " Will be copied to " " $parent "
        echo "$parent2" " Will be deleted!"

    cp -Rp "$directory" "$parent"

    rm -rf "$parent2"

    done

    for directory in $(find "$path" -maxdepth 3 -mindepth 3 -type d ! -name "VIDEO_TS") do

        parent=$(dirname $(dirname "$directory"))
    
        echo "$parent" " Will be deleted!"

    rm -rf "$parent"

    done

  3. Sauvegardez le fichier script et quittez l'éditeur en appuyant sur la touche Ctrl + X puis appuyez sur Y .

  4. Rendez le fichier script exécutable en exécutant la commande suivante dans le terminal :

    chmod +x ~/my_script.sh

  5. Exécutez le script en exécutant la commande suivante dans le terminal :

    bash ~/my_script.sh

Terminé

Bonne chance

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X