Aplatir un répertoire imbriqué & Hiérarchie de fichiers à partir de la ligne de commande de Mac OS X
Avez-vous déjà eu besoin d'aplatir une structure de répertoires, en déplaçant tout le contenu des fichiers des dossiers enfants d'un répertoire dans un seul dossier ? Bien que vous puissiez le faire manuellement en déplaçant les fichiers et les dossiers du système de fichiers de Mac OS X ou Linux, une option plus rapide consiste à passer à la ligne de commande. Peut-être qu'à un moment donné, vous avez créé une hiérarchie imbriquée de répertoires que vous devez maintenant annuler en déplaçant tous les fichiers de ces dossiers imbriqués et en les ramenant dans un seul répertoire, ou peut-être cherchez-vous à simplifier une structure de répertoires, quelle qu'en soit la raison, cela l'astuce fonctionne plutôt bien.
L'utilisation de la ligne de commande pour aplatir les fichiers et les structures de répertoires est évidemment réservée aux utilisateurs avancés qui sont à l'aise avec l'utilisation du terminal en général, si cela ne vous décrit pas, envisagez de le faire manuellement via le Finder , ou en utilisant l'application Mac Automator pour réaliser une automatisation similaire des activités du système de fichiers. Cependant, nous nous concentrons ici sur l'aplatissement des répertoires à partir de la ligne de commande.
Exemple d'aplatissement d'un répertoire de fichiers imbriqués
Pour mieux comprendre ce que nous essayons d'accomplir, prenons un exemple de structure de répertoire imaginaire appelée TestDirectory située dans un dossier d'accueil de l'utilisateur. Dans cet exemple, TestDirectory contient des sous-dossiers tels que SubDirectory1, SubDirectory2, SubDirectory3, etc., chacun avec des fichiers dans ces dossiers respectifs. Ce que nous cherchons à faire ici est d'aplatir la structure des répertoires, en déplaçant tous les fichiers de SubDirectory (X) vers le répertoire parent "TestDirectory".Le répertoire initial et son contenu affichés de manière récursive avec pourraient ressembler à ceci :
$ find ~/TestDirectory/ -type f ~/TestDirectory/rooty.jpg ~/TestDirectory/SampleDirectory1/beta-tool-preview.jpg ~/TestDirectory/SampleDirectory1 /alphabeta-tool.jpg ~/TestDirectory/SampleDirectory2/test-tools.jpg ~/TestDirectory/SampleDirectory3/test-png.jpg ~/TestDirectory/SampleDirectory3/test1.jpg ~/TestDirectory/SampleDirectory3/test2.jpg
Pour aplatir le contenu de ce répertoire et de ce sous-répertoire dans le dossier TestDirectory, vous devez utiliser la chaîne de commande suivante :
find TargetDirectory/ -mindepth 2 -type f -exec mv -i '{}' TargetDirectory/ ';'
Une fois le contenu du répertoire aplati, il devrait ressembler à ceci lorsqu'il est répertorié :
~/TestDirectory/rooty.jpg ~/TestDirectory/beta-tool-preview.jpg ~/TestDirectory/alphabeta-tool.jpg ~/TestDirectory/test-tools .jpg ~/TestDirectory/test-png.jpg ~/TestDirectory/test1.jpg ~/TestDirectory/test2.jpg
Notez que les sous-répertoires existeront toujours, ils seront simplement vides. Avoir du sens ? Si ce n'est pas le cas, ou si cela ne démontre pas ce que vous voulez accomplir, vous ne voulez probablement pas du tout aplatir un répertoire, peut-être cherchez-vous à fusionner ou à utiliser idem pour faire une copie complexe ailleurs.
Aplatissement d'une structure de répertoires et d'une hiérarchie de fichiers imbriqués avec la ligne de commande
Prêt à continuer ? La chaîne de commande que nous allons utiliser pour aplatir une structure de répertoires et déplacer tous les fichiers des sous-répertoires vers la base du répertoire cible est la suivante :
find -mindepth 2 -type f -exec mv -i '{}' ';'
Remplacez par le répertoire de votre choix à aplatir, comme illustré dans l'exemple ci-dessus.
Oui, le répertoire apparaît deux fois dans la chaîne de commande, la première fois est le répertoire recherché pour aplatir les sous-répertoires et la seconde fois comme destination des éléments trouvés.
Soyez précis avec la destination spécifiée, car ce n'est pas réversible (enfin, du moins sans beaucoup de travail manuel de votre part), alors ne le faites que si vous êtes absolument sûr de vouloir déménager tous les fichiers des répertoires cibles des répertoires enfants vers le dossier racine cible.
Comme mentionné précédemment, vous pouvez également le faire dans le Finder d'OS X, ou au moins observer les changements de fichiers et de dossiers dans le Finder. Option + clic sur les petites flèches dans la vue Liste ouvre tous les sous-répertoires, montrant la hiérarchie des dossiers comme ceci :
Après avoir joué avec une variété d' alternatives bash et zsh, cette astuce pratique a été laissée par un commentateur sur StackExcange et elle s'est avérée être la méthode la plus simple et la plus compatible. Si vous connaissez une meilleure façon d'aplatir un répertoire imbriqué, faites-le nous savoir dans les commentaires !