1 votes

Balayage récursif pour déplacer tous les fichiers et supprimer les répertoires vides

Je suis en train d'apprendre le scripting bash et je veux déplacer tous les fichiers *.ort vers un nouveau répertoire et supprimer le répertoire une fois que le fichier .ort est déplacé.

À noter :

  1. Je n'ai pas besoin de conserver la même structure - je veux déplacer vers un répertoire unique contenant tous les fichiers .ort
  2. Je peux supprimer le répertoire une fois que le fichier est déplacé car il ne contient qu'un fichier .ort et rien d'autre

Je pense que cela fonctionnera, mais je voulais confirmer avant de lancer le scripting bash sur un répertoire.

Syntaxe :

find / -iname "*.ort" -type d -exec /bin/mv {} /home/user123/Desktop/movedfiles/ \;
rmdir **/*/;

Je suis ouvert à toutes suggestions et retours pour des améliorations ou savoir si cela fonctionnera :)

0voto

heemayl Points 85741

Vous pouvez faire :

find . -type f -name '*.ort' -exec mv -i {} outdir \; -exec bash -c 'rmdir "${1%/*}"' _ {} \;
  • find . -type f -name '*.ort' -exec mv -i {} outdir \; déplacera le seul fichier .ort du répertoire source vers le répertoire cible (outdir)

  • L'action -exec suivante, -exec bash -c 'rmdir "${1%/*}"' _ {} \; s'exécutera uniquement si l'action -exec précédente réussit, c'est-à-dire si le fichier .ort est trouvé et déplacé avec succès. Vous pouvez également le mettre sous un seul -exec avec && mais deux -exec sont utilisés pour rendre les choses un peu plus propres.

  • L'action -exec suivante se contente de supprimer le répertoire vide qui contenait le fichier ; ${1%/*} est un motif d'extension de paramètre bash pour obtenir le nom du répertoire, dirname fonctionnerait aussi.

Exemple :

$ tree
.
 egg
 ortdir1
   foo.ort
 ortdir2
   bar.ort
 outdir
 spam

$ find . -type f -name '*.ort' -exec mv -i {} outdir \; -exec bash -c 'rmdir "${1%/*}"' _ {} \;

$ tree
.
 egg
 outdir
   bar.ort
   foo.ort
 spam

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