37 votes

Existe-t-il un moyen inverse de ce que fait l'option mkdir -p ?

J'utilise Ubuntu 18.04, 19.10

en utilisant #!/bin/bash script comment supprimer les répertoires s'ils sont vides de bout en bout et s'arrêter au répertoire ayant un ou des fichiers.

disons J'ai créé plusieurs répertoires avec la commande suivante

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

Plus tard, pendant ce temps, j'ai créé beaucoup de fichiers dans tous les répertoires à partir du répertoire "my to 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 a des fichiers

mkdir -p permettra de voir s'il existe des répertoires parents dans la commande mkdir -p $HOME/.local/my/sub/directories/1/2/3 et c'est sûr.

Question : comme ci-dessus, existe-t-il une commande permettant de voir si les répertoires sont vides et de supprimer à partir de la fin et de s'arrêter au répertoire ? sub Je veux dire $HOME/.local/my/sub

64voto

Terrance Points 35422

L'inversion de la mkdir -p La commande serait rmdir -p . rmdir -p supprimera la structure du dossier jusqu'à ce que le dossier ne soit pas vide. Vous devriez pouvoir utiliser rmdir au lieu de mkdir à votre commande :

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

Vous pouvez également spécifier des caractères de remplacement, comme si votre $HOME/.local/my/sub/ contenu comme directories1 , directories2 y directories3 par exemple, il pourrait être fait comme :

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

o

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

Si un dossier au moment où il les supprime contient des données ou un autre dossier, vous recevrez un message d'erreur indiquant que le répertoire n'est pas vide et s'arrêtera.

rmdir: failed to remove directory '/home/user/.local/my/sub': Directory not empty

J'espère que cela vous aidera !

7voto

joejack Points 1

Il y a deux façons d'y parvenir. La méthode facile est la suivante :

# Command to return only empty directories in the current directory:
find . -type d -empty -print

Maintenant, sur ma version d'Ubuntu, je peux simplement effectuer ce qui suit :

# Find empty files, and delete them:
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

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

$ cat deldir
#!/bin/bash
[[ $# = 0 ]] && { echo "usage: ${0##*/} DIRECTORY..." >&2; exit 1; }
rc=0
while [[ $# != 0 ]] ;do
  dir=${1%/}    # in case someone specifies DIRECTORY/ out of habit
  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