2 votes

Déplacer plusieurs fichiers de sous-dossiers vers le dossier parent sur Mojave ?

Je suis en train d'essayer de déplacer les fichiers de plusieurs (100+) sous-dossiers vers le dossier parent, mais je ne veux pas le faire manuellement pour chaque dossier. Y a-t-il quelque chose que je pourrais faire pour automatiser cela?

J'ai essayé des solutions pour les anciens systèmes d'exploitation et elles ne semblent pas fonctionner, et je ne comprends pas pleinement https://discussions.apple.com/thread/8385501

Merci!

1voto

nohillside Points 82672

Dans Terminal, exécutez

cd PARENTFOLDER
mkdir -p $TMPDIR/move
mv */* $TMPDIR/move/
rmdir *
mv $TMPDIR/move/* .
rmdir $TMPDIR/move

Veuillez noter

  • Cela entraînera une perte de données si des fichiers dans différents sous-dossiers ont le même nom.
  • rmdir * échouera si les sous-dossiers ne sont pas vides après le déplacement (par exemple, s'ils contiennent des fichiers/dossiers commençant par un .)
  • Cela fonctionne en déplaçant d'abord les fichiers dans les sous-dossiers vers un emplacement temporaire, puis en supprimant les sous-dossiers eux-mêmes, et enfin en déplaçant les fichiers de l'emplacement temporaire vers le parent. Les déplacements sont rapides s'ils sont sur le même lecteur, ils sont très lents (et peuvent échouer en raison du manque d'espace disque) si le dossier parent est sur un lecteur externe

Pour la version étendue que vous avez demandée dans les commentaires

Existe-t-il un moyen simple d'appliquer cela en lot pour un dossier entier ? Par exemple : Année (dossier parent) > Mois > Jour 1, 2, etc. Où je peux appliquer votre fonction à chaque dossier dans Année, avec le contenu de Jour 1 et 2 allant dans Mois, mais le contenu de Mois ne va pas dans Année ?

_tmp=$(mktemp -d)
cd YEAR
for month in *; do
    [[ -d "$month" ]] || continue

    echo mv -- "$month"/*/* "$_tmp"/
    echo rmdir -- "$month"/*
    echo mv "$_tmp"/* "$month"/
done
rmdir "$_tmp"

Retirez les echo si le résultat de l'exécution à vide semble correct.

0voto

UKstudent Points 13

En plus de la réponse de nohillside, vous pouvez utiliser Spotlight pour rechercher les fichiers dans le dossier parent.

Donc, par exemple, si vous avez des centaines de fichiers texte répartis dans des dossiers au sein d'un seul dossier parent, vous pouvez utiliser la fonction de recherche de Finder pour rechercher des fichiers texte de n'importe quel nom. Il vous suffit de taper dans la zone de recherche "texte" - ou tout autre format, tel que "docx", ou le nom de l'application, tel que "word" - et une liste déroulante devrait apparaître. Choisissez le format souhaité et Finder recherchera le répertoire actuel pour tout fichier correspondant à ce format.

Ensuite, avec les fichiers organisés dans la fenêtre de recherche, vous pouvez tous les sélectionner et les déplacer vers un autre dossier de votre choix.

Cette méthode, bien qu'un peu fastidieuse, peut également être utilisée pour des fichiers de différents formats, à condition d'utiliser Finder pour rechercher chaque format (comme .txt ou .docx), sélectionner et déplacer tous les résultats, puis rechercher à nouveau les formats de fichiers restants dans le dossier parent.

J'espère que cela vous aidera.

EDIT: Je ne sais pas comment cela affecterait les fichiers qui portent le même nom, il serait donc peut-être judicieux de faire un test sur quelques fichiers avant de procéder.

-1voto

user3439894 Points 52496

Je cherche à déplacer les fichiers de plusieurs (100+) sous-dossiers vers le dossier parent, mais je ne veux pas le faire manuellement pour chacun. Y a-t-il quelque chose que je pourrais faire pour automatiser cela ?

Voici une méthode pour le faire...

  1. Ouvrez Terminal.

  2. Changez de répertoire vers le dossier parent contenant les sous-dossiers, par exemple :

     cd /chemin/vers/parent
  3. Utilisez la commande suivante pour déplacer tous les fichiers des sous-dossiers vers le dossier parent, celui sur lequel la cd commande a été définie à l'étape précédente :

     find . -type f -name '*' -exec mv -n '{}' . \;
    • Notez que cette commande déplace juste les fichiers, pas les dossiers ou les bundle d'applications, et ne écrase pas les fichiers du même nom déjà présents dans le dossier parent.
  4. Pour supprimer les sous-dossiers vides, utilisez la commande suivante :

     find . -type d -name '*' -exec rm -d '{}' \;
    • Notez que tout sous-dossier non supprimé contient des fichiers du même nom déjà présents dans le dossier parent, ou un bundle d'application s'il en existe. Vous pouvez décider comment le traiter après avoir vu ce qu'il reste. Si juste quelques fichiers n'ont pas été déplacés, peut-être les déplacer manuellement.

REMARQUE : Assurez-vous toujours d'avoir des sauvegardes appropriées avant d'exécuter des commandes dans Terminal et les commandes telles qu'elles sont saisies produiront le comportement 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