LINUX.ORG.RU
ФорумAdmin

скрипт по удалению пустых директорий


0

0

Писал я его так: if [ `ls -lh|awk '{print$2}'` == 0 ] then q=`pwd` && echo "Удаляем каталог $q" && echo -n " 1-да,2-нет"; read w; if [ $w == 1 ]; then cd ../ && rm -fvr $q; else exit 0; fi; else echo "каталог не пуст - не удаляем"; exit 0; fi Это условие если каталог пуст. for i in `ls -1`;do echo $i && echo "Переход в каталог" && cd $i && sleep 4;cd ../;done Это цикл, теоритически он должен входить в каждой подкаталог данной директории, но вся проблема в том, что cd $i не работает, пробовал и $(i) все равно не может распозновать переменные. Как сделать так,чтобы распозновалось ?

find -type f -exec rmdir {} \; 2> /dev/null

будет работать, т.к. rmdir непустые директории не удаляет. возможно, потребуется заключить {} в кавычки "{}".

gaa ★★
()
Ответ на: комментарий от gaa

> -type f

который как раз ищет только обычные файлы, а не директории

INFOMAN ★★★★★
()
Ответ на: комментарий от birdie

:)

Потому-что велосипед и не unix-way ;)

Deleted
()
Ответ на: комментарий от tailgunner

>> Все остальные советы идут в лес, ДУМАЙТЕ почему.
>Ну излагай, не томи.
Смысл в порядке удаления пустых директорий. Сначала надо удалить самую глубокую, т.е. man find /-depth

P.S. birdie на этот раз тебе зачет, а то обычно фигню пишешь :-)

anonymous
()
Ответ на: комментарий от birdie

find . -depth -type d -empty -exec echo rm -r $1 '{}' ';'

пытался вот так , но не удаляет ни фига - пробовал вместо rm rmdir - всеравно переменные не распознает никак.

s1392781
() автор топика
Ответ на: комментарий от anonymous

> Смысл в порядке удаления пустых директорий

Ну если в понятие "пустой каталог" включить "каталог, в котором нет ничего или только пустые каталоги". тогда да. Но OP об этом ничего не сказал.

tailgunner ★★★★★
()
Ответ на: комментарий от s1392781

Откуда ты взял $1? Зачем экранируешь ;? man find, там даже пример есть!

Deleted
()

for i in `ls -1`;do
  echo $i && echo "Переход в каталог" && cd $i && sleep 4
  cd ../
done

>Это цикл, теоритически он должен входить в каждой подкаталог данной директории

Может теорИтически он и будет по всем каталогам проходить, но если встречается файл,
то cd $i не сработает, а вот cd ../ сработает замечательно.
Далее скрипт оказывается в каталоге ../, а там уже переходить в каталоги,
выводимые ls -1 не получится.

Если вам не нравится find, можно переписать, допустим так:
A="$IFS"; IFS=$'\n'
for i in `ls -1`; do
  if [ -d "$i" ] ; then
    echo $i && echo "Переход в каталог" 
    cd "$i"
    if [ $? == 0 ] ; then 
      sleep 4
      cd ../
    fi
  fi
done

mky ★★★★★
()
Ответ на: комментарий от s1392781

> find . -depth -type d -empty -exec echo rm -r $1 '{}' ';'

> пытался вот так , но не удаляет ни фига - пробовал вместо rm rmdir - всеравно переменные не распознает никак.

а нафига тебе $1 подставлять? имя файла, найденного find-ом подставляется в {}

gaa ★★
()
Ответ на: комментарий от gaa

без разницы все равно не распознает переменные, даже с опцией rm -fvr не хочет удалять.

s1392781
() автор топика
Ответ на: комментарий от mky

find мне нравиться (хотя slocate лучше) просто он не знает что такое переменное, а вот этот код мне помог спасибо.

s1392781
() автор топика
Ответ на: комментарий от anonymous

Че слабо зарегиться ? У человека буква "и" не пропечатываетя и что ? не знал, что те, кто начинают - недоучки.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.