Существует ли путь реверс того, что делает mkdir-p опция?

Я использую Ubuntu 18.04, 19.10

использование #!/bin/bash напишите сценарий, как удалить каталоги, если они пусты от дальнего конца и остановки в каталоге, имеющем какой-либо файл/файлы.

сказать.. Я создал несколько каталогов с ниже команды

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

lateron в течение времени я создал партию файлов во всех каталогах, начинающих с каталога "мой к 1/2/3".

Через какое-то время я удалил все файлы в каталогах "мой", "каталоги", "1", "2", "3". Отметьте тот каталог sub имеет некоторые файлы..

mkdir -p опция будет видеть, существуют ли родительские каталоги в команде mkdir -p $HOME/.local/my/sub/directories/1/2/3 и его сейф.

Вопрос: как вышеупомянутое там любая команда, чтобы видеть, пусты ли каталоги и удаляют из дальнего конца и остановки в каталоге sub Я имею в виду $HOME/.local/my/sub

33
задан 18 April 2020 в 16:39

3 ответа

Реверсирование mkdir -p команда была бы rmdir -p. rmdir -p удалит структуру папок до папки, не пусто. Необходимо смочь использовать rmdir вместо mkdir на Вашей команде:

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

Можно также указать подстановочные знаки как если Ваш $HOME/.local/my/sub/ содержавший как directories1, directories2 и directories3 например, это могло быть сделано как:

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

или

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

Если какая-либо папка, поскольку это удаляет их, будет содержать данные или другую папку, то Вы получите сообщение об ошибке, что каталог не пуст и остановки.

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

Надеюсь, это поможет!

60
ответ дан 25 April 2020 в 10:45

Существует два способа, которыми я делал бы попытку этого. Легкий метод следующие:

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

Теперь на моей версии Ubuntu, я могу просто выполнить следующее:

# Find empty files, and delete them:
find . -type d -empty -delete

Иначе можно создать некоторый сценарий с логикой, чтобы считать файлы в каталоге и удалить их. Вот начальная точка для подсчета файлов в подкаталогах:

#!/bin/bash

for i in */ .*/ ; do 
    echo -n $i": " ; 
    (find "$i" -type f | wc -l) ; 
done
7
ответ дан 25 April 2020 в 10:45

Это ближе к реверсу 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

Пример:

mkdir -p a/b/c x/y/z
deldir   a/b/c x/y/z
0
ответ дан 25 April 2020 в 10:45

Другие вопросы по тегам:

Похожие вопросы: