Надо просто проверить пустая ли директория.
Ожидал, что в test будет аналог -s FILE, но не нашёл.Написал такой колхоз
[ $(ls DIR | wc -l) -eq 0 ]Задача решена, но очевидно будет бредом, если директория может содержать "миллион" файлов.
И думаю вариант типа ls | head -n1 тоже не очень хорошо.Есть ли более цивильное решение?
Спасибо
find DIR -maxdepth 0 -empty
> find DIR -maxdepth 0 -emptyммм, не работает. может, непустой stdout надо проверять...
[ -z "$(find "${DIR}" -maxdepth 0 -empty -print -quit)" ] && echo 'наличие файлов в DIR'
Или вот так:
[ "$(find "${DIR}" -mindepth 1 -print -quit)" ]
По идее, с -quit д.бы быть быстрее, чем ls, но не проверял.
> find DIR -maxdepth 0 -emptyключи:
Цитирую автора:
"
1) могут меняться, 2) отличаться в разных реализациях, 3) это какой-то лютый здец так программировать. самого не коробит?
"в частности:
find DIR -maxdepth 0 -empty
find: bad option -maxdepth
> ключи:
> Цитирую автора:
> "
> 1) могут меняться, 2) отличаться в разных реализациях, 3) это какой-то лютый
> здец так программировать. самого не коробит?
> "
> в частности:
> find DIR -maxdepth 0 -empty
> find: bad option -maxdepthНеблагодарный! Давно б уже "автора" монетизиорлвал, профессиональненько.
[U]ЫЫ, 13:31 , 14-Авг-17, (13)[/U]
И да... за адаптацию под любую из дополнительных систем- я возьму дополнительные деньги...
:)---Бесконечная совместимомть -- за бесконечные деньги!!
> ---Бесконечная совместимомть -- за бесконечные деньги!!Ну, смех смехом, а ... по сути то так и есть.
это где у тебя опции нет?
> это где у тебя опции нет?HP-UX
Кстати не пришедший из тьмы веков, а новенький :)
> Надо просто проверить пустая ли директория.
> Ожидал, что в test будет аналог -s FILE, но не нашёл.
> Написал такой колхоз
> [ $(ls DIR | wc -l) -eq 0 ]
> Задача решена, но очевидно будет бредом, если директория может содержать "миллион" файлов.
> И думаю вариант типа ls | head -n1 тоже не очень хорошо.
> Есть ли более цивильное решение?
> Спасибо[ $(du --inodes DIR | cut -f1) -eq 1 ]
du --inodes --max-depth 0
совершит обход всего каталога и вложенных. вариант медленее чем ls, предложенный автором.
> du --inodes --max-depth 0
> совершит обход всего каталога и вложенных. вариант медленее чем ls, предложенный автором.Точно медленее, сорри
> Надо просто проверить пустая ли директория.
> Ожидал, что в test будет аналог -s FILE, но не нашёл.
> Написал такой колхоз
> [ $(ls DIR | wc -l) -eq 0 ]
> Задача решена, но очевидно будет бредом, если директория может содержать "миллион" файлов.
> И думаю вариант типа ls | head -n1 тоже не очень хорошо.
> Есть ли более цивильное решение?
> СпасибоОтработайте выхлоп rm:
rm -di непустойкаталог
rm: невозможно удалить 'непустойкаталог': Каталог не пустrm -di пустойкаталог
rm: удалить каталог 'пустойкаталог'?
>[оверквотинг удален]
>> [ $(ls DIR | wc -l) -eq 0 ]
>> Задача решена, но очевидно будет бредом, если директория может содержать "миллион" файлов.
>> И думаю вариант типа ls | head -n1 тоже не очень хорошо.
>> Есть ли более цивильное решение?
>> Спасибо
> Отработайте выхлоп rm:
> rm -di непустойкаталог
> rm: невозможно удалить 'непустойкаталог': Каталог не пуст
> rm -di пустойкаталог
> rm: удалить каталог 'пустойкаталог'?ну или гляньте исходник rm как он проверяет что каталог не пуст
> Отработайте выхлоп rm:для всех локалей?
>> Отработайте выхлоп rm:
> для всех локалей?Это же ЮниксВэй.. какая вам разница что там за локаль у юзера? :) Работаете в своей.
делается так:
export LANGUAGE=en; rm -di непустойкаталог
для всех реализаций и их сообщений? сообщения команд не относятся к апи и: 1) могут меняться, 2) отличаться в разных реализациях, 3) это какой-то лютый здец так программировать. самого не коробит?
> для всех реализаций и их сообщений? сообщения команд не относятся к апи
> и: 1) могут меняться, 2) отличаться в разных реализациях, 3) это
> какой-то лютый здец так программировать. самого не коробит?Как так? Вы похоже только что с курсов телепатов...
Есть конкретная задача... Она решается.
Человек пишущий универсальный чекер на все случаи систем - и задающий такой вопрос- мягко говоря занимается не тем делом к которому у него есть талант.Мое решение- быстро и эффективно, без оверхеда, решает задачу. на конкретной системе.
Ваши претензии- надуманны.> и: 1) могут меняться,
если вы собираетесь использовать решение на многих системах неизвестной архитектуры- посмотрите как и было посоветовано исходник rm.
>2) отличаться в разных реализациях,
Человек собирается использовать свой скрипт на разных реализациях? Он вам это в личной переписке сказал? Или телепатия?
>3) это какой-то лютый здец так программировать. самого не коробит?Это быстрое, простое и эффективное решение не претендующее на универсальность.
А почему это должно коробить?
>[оверквотинг удален]
> Как так? Вы похоже только что с курсов телепатов...
> Есть конкретная задача... Она решается.
> Человек пишущий универсальный чекер на все случаи систем - и задающий такой
> вопрос- мягко говоря занимается не тем делом к которому у него
> есть талант.
> Мое решение- быстро и эффективно, без оверхеда, решает задачу. на конкретной системе.
> Ваши претензии- надуманны.
>> и: 1) могут меняться,
> если вы собираетесь использовать решение на многих системах неизвестной архитектуры- посмотрите
> как и было посоветовано исходник rm.И да... за адаптацию под любую из дополнительных систем- я возьму дополнительные деньги...
:)Нет не треснет :)
>>2) отличаться в разных реализациях,
> Человек собирается использовать свой скрипт на разных реализациях? Он вам это в
> личной переписке сказал? Или телепатия?
>>3) это какой-то лютый здец так программировать. самого не коробит?
> Это быстрое, простое и эффективное решение не претендующее на универсальность.
> А почему это должно коробить?
>[оверквотинг удален]
> И да... за адаптацию под любую из дополнительных систем- я возьму дополнительные
> деньги...
> :)
> Нет не треснет :)
>>>2) отличаться в разных реализациях,
>> Человек собирается использовать свой скрипт на разных реализациях? Он вам это в
>> личной переписке сказал? Или телепатия?
>>>3) это какой-то лютый здец так программировать. самого не коробит?
>> Это быстрое, простое и эффективное решение не претендующее на универсальность.
>> А почему это должно коробить?Ну и наконец..
"find DIR -maxdepth 0 -empty"
просто поражает своей привязкой к api, неотличаемостью на разных архитектурах и не коробимостью.. :)
понимаю задел. тут даже если ты сам поймешь что не прав - об этом не скажешь и будешь доказывать провоту. если ты привык так писать - ок пиши.
> понимаю задел. тут даже если ты сам поймешь что не прав -
> об этом не скажешь и будешь доказывать провоту. если ты привык
> так писать - ок пиши.Ты похоже реально не понимаешь что ключи у программы- на разных платформах и разных реализациях могут быть разные... и нет принципиально никакой разницы между тем что предложил я и тем что предложил ты...
Ну.. не понимаешь и не понимаешь... что ж тут поделаешь :)
> [ $(ls DIR | wc -l) -eq 0 ]
> Задача решена, но очевидно будет бредом, если директория может содержать "миллион" файлов.
> И думаю вариант типа ls | head -n1 тоже не очень хорошо.Если верить исходникам ls, в некоторых случаях он может не читать весь каталог перед выводом, а выводить сразу:
/* In this narrow case, print out each name right away, so
ls uses constant memory while processing the entries of
this directory. Useful when there are many (millions)
of entries in a directory. */
if (format == one_per_line && sort_type == sort_none
&& !print_block_size && !recursive)Должно сработать что-то вроде этого:
ls -f1 | head -n3 | wc -lВыведет 2 на пустом каталоге (. и ..) и 3 — на непустом.
> Есть ли более цивильное решение?for i in `find / -type d`; do if [ `stat -c%s $i` -gt 6 ]; then echo $i FULL; else rmdir $i; fi; done;