37 votes

Y a-t-il une façon de faire l'inverse de ce que fait l'option mkdir -p?

Je utilise Ubuntu 18.04, 19.10

en utilisant le script #!/bin/bash comment supprimer les répertoires s'ils sont vides à partir de l'extrémité éloignée et s'arrêter au répertoire contenant un quelconque fichier/fichiers.

disons.. j'ai créé plusieurs répertoires avec la commande ci-dessous

mkdir -p $HOME/.local/my/sub/directories/1/2/3

plus tard, au fil du temps, j'ai créé beaucoup de fichiers dans tous les répertoires en commençant par le répertoire "my" jusqu'à 1/2/3".

Après un certain temps, j'ai supprimé tous les fichiers dans les répertoires "my", "directories", "1", "2", "3". Notez que le répertoire sub contient quelques fichiers..

l'option mkdir -p vérifiera s'il y a des répertoires parents dans la commande mkdir -p $HOME/.local/my/sub/directories/1/2/3 et c'est sécurisé.

Question: comme ci-dessus, y a-t-il une commande pour voir si les répertoires sont vides et les supprimer à partir de l'extrémité éloignée et s'arrêter au répertoire sub je veux dire $HOME/.local/my/sub

64voto

Terrance Points 35422

La commande de renversement de la commande mkdir -p serait rmdir -p. rmdir -p supprimera la structure des dossiers jusqu'à ce que le dossier ne soit pas vide. Vous devriez pouvoir utiliser rmdir à la place de mkdir dans votre commande :

rmdir -p $HOME/.local/my/sub/directories/1/2/3

Vous pouvez également spécifier des caractères génériques comme si votre $HOME/.local/my/sub/ contenait par exemple directories1, directories2 et directories3, cela pourrait se faire ainsi :

rmdir -p $HOME/.local/my/sub/directories*/1/2/3

ou

rmdir -p $HOME/.local/my/sub/*/1/2/3

Si un dossier que vous supprimez contient des données ou un autre dossier, vous recevrez un message d'erreur indiquant que le répertoire n'est pas vide et l'opération s'arrête.

rmdir: échec de la suppression du répertoire '/home/user/.local/my/sub': Répertoire non vide

J'espère que cela vous aidera !

7voto

joejack Points 1

Il existe deux façons de tenter cela. La méthode facile est la suivante :

# Commande pour ne retourner que les répertoires vides dans le répertoire actuel :
find . -type d -empty -print

Maintenant, sur ma version d'Ubuntu, je peux simplement exécuter ce qui suit :

# Trouver des fichiers vides et les supprimer :
find . -type d -empty -delete

Sinon, vous pouvez créer un script avec une logique pour compter les fichiers dans un répertoire et les supprimer. Voici un point de départ pour compter les fichiers dans les sous-répertoires :

#!/bin/bash

for i in */ .*/ ; do 
    echo -n $i": " ; 
    (find "$i" -type f | wc -l) ; 
done

0voto

jrw32982 Points 148

Ceci est plus proche de l'inverse de mkdir -p:

$ cat deldir
#!/bin/bash
[[ $# = 0 ]] && { echo "usage: ${0##*/} RÉPERTOIRE..." >&2; exit 1; }
rc=0
while [[ $# != 0 ]] ;do
  dir=${1%/}    # au cas où quelqu'un spécifie RÉPERTOIRE/ par habitude
  shift
  while true ;do
    rmdir -- "$dir" || { rc=1; break; }
    [[ $dir = */* ]] || break
    dir=${dir%/*}
  done
done
exit $rc

Exemple:

mkdir -p a/b/c x/y/z
deldir   a/b/c x/y/z

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