The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  правила/FAQ  поиск  регистрация  вход/выход  слежка  RSS
"Проверить наличие файлов в директории"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Проверить наличие файлов в директории"  –1 +/
Сообщение от Alexander7 (ok) on 13-Авг-17, 09:17 
Надо просто проверить пустая ли директория.
Ожидал, что в test будет аналог -s FILE, но не нашёл.

Написал такой колхоз
[ $(ls DIR | wc -l) -eq 0 ]

Задача решена, но очевидно будет бредом, если директория может содержать "миллион" файлов.
И думаю вариант типа ls | head -n1 тоже не очень хорошо.

Есть ли более цивильное решение?

Спасибо

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Проверить наличие файлов в директории"  +/
Сообщение от pavard (ok) on 13-Авг-17, 16:59 
find DIR -maxdepth 0 -empty
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

9. "Проверить наличие файлов в директории"  +/
Сообщение от Andrey Mitrofanov on 14-Авг-17, 12:22 
> find DIR -maxdepth 0 -empty

ммм, не работает. может, непустой stdout надо проверять...

[ -z "$(find "${DIR}" -maxdepth 0 -empty  -print -quit)" ] && echo 'наличие файлов в DIR'

Или вот так:

[ "$(find "${DIR}" -mindepth 1 -print -quit)" ]

По идее, с -quit д.бы быть быстрее, чем ls, но не проверял.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

17. "Проверить наличие файлов в директории"  –1 +/
Сообщение от ЫЫ on 15-Авг-17, 08:12 
> find DIR -maxdepth 0 -empty

ключи:  
Цитирую автора:
"
1) могут меняться, 2) отличаться в разных реализациях, 3) это какой-то лютый здец так программировать. самого не коробит?
"

в частности:
find DIR -maxdepth 0 -empty
find: bad option -maxdepth


Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

18. "Проверить наличие файлов в директории"  +/
Сообщение от Andrey Mitrofanov on 15-Авг-17, 10:42 
> ключи:
> Цитирую автора:
> "
> 1) могут меняться, 2) отличаться в разных реализациях, 3) это какой-то лютый
> здец так программировать. самого не коробит?
> "
> в частности:
> find DIR -maxdepth 0 -empty
> find: bad option -maxdepth

Неблагодарный! Давно б уже "автора" монетизиорлвал, профессиональненько.

ЫЫ, 13:31 , 14-Авг-17, (13)

И да... за адаптацию под любую из дополнительных систем- я возьму дополнительные деньги...
    :)

---Бесконечная совместимомть -- за бесконечные деньги!!

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

19. "Проверить наличие файлов в директории"  +/
Сообщение от ЫЫ on 15-Авг-17, 10:57 
> ---Бесконечная совместимомть -- за бесконечные деньги!!

Ну, смех смехом, а ... по сути то так и есть.

Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

20. "Проверить наличие файлов в директории"  +/
Сообщение от pavard (ok) on 18-Авг-17, 00:46 
это где у тебя опции нет?
Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

22. "Проверить наличие файлов в директории"  +/
Сообщение от ЫЫ on 18-Авг-17, 08:34 
> это где у тебя опции нет?

HP-UX
Кстати не пришедший из тьмы веков, а новенький :)

Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

2. "Проверить наличие файлов в директории"  –1 +/
Сообщение от Kazak (??) on 13-Авг-17, 20:40 
> Надо просто проверить пустая ли директория.
> Ожидал, что в test будет аналог -s FILE, но не нашёл.
> Написал такой колхоз
> [ $(ls DIR | wc -l) -eq 0 ]
> Задача решена, но очевидно будет бредом, если директория может содержать "миллион" файлов.
> И думаю вариант типа ls | head -n1 тоже не очень хорошо.
> Есть ли более цивильное решение?
> Спасибо

[ $(du --inodes DIR | cut -f1) -eq 1 ]

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Проверить наличие файлов в директории"  –1 +/
Сообщение от pavard (ok) on 14-Авг-17, 00:41 
du --inodes --max-depth 0
совершит обход всего каталога и вложенных. вариант медленее чем ls, предложенный автором.
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

8. "Проверить наличие файлов в директории"  +/
Сообщение от Kazak (??) on 14-Авг-17, 11:59 
> du --inodes --max-depth 0
> совершит обход всего каталога и вложенных. вариант медленее чем ls, предложенный автором.

Точно медленее, сорри


Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

4. "Проверить наличие файлов в директории"  –1 +/
Сообщение от ЫЫ on 14-Авг-17, 10:35 
> Надо просто проверить пустая ли директория.
> Ожидал, что в test будет аналог -s FILE, но не нашёл.
> Написал такой колхоз
> [ $(ls DIR | wc -l) -eq 0 ]
> Задача решена, но очевидно будет бредом, если директория может содержать "миллион" файлов.
> И думаю вариант типа ls | head -n1 тоже не очень хорошо.
> Есть ли более цивильное решение?
> Спасибо

Отработайте выхлоп rm:
rm -di непустойкаталог
rm: невозможно удалить 'непустойкаталог': Каталог не пуст

rm -di пустойкаталог
rm: удалить каталог 'пустойкаталог'?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Проверить наличие файлов в директории"  –1 +/
Сообщение от ЫЫ on 14-Авг-17, 10:36 
>[оверквотинг удален]
>> [ $(ls DIR | wc -l) -eq 0 ]
>> Задача решена, но очевидно будет бредом, если директория может содержать "миллион" файлов.
>> И думаю вариант типа ls | head -n1 тоже не очень хорошо.
>> Есть ли более цивильное решение?
>> Спасибо
> Отработайте выхлоп rm:
> rm -di непустойкаталог
> rm: невозможно удалить 'непустойкаталог': Каталог не пуст
> rm -di пустойкаталог
> rm: удалить каталог 'пустойкаталог'?

ну или гляньте исходник rm как он проверяет что каталог не пуст

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Проверить наличие файлов в директории"  +/
Сообщение от pavard (ok) on 14-Авг-17, 11:39 
> Отработайте выхлоп rm:

для всех локалей?

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

10. "Проверить наличие файлов в директории"  +/
Сообщение от ЫЫ on 14-Авг-17, 13:01 
>> Отработайте выхлоп rm:
> для всех локалей?

Это же ЮниксВэй.. какая вам разница что там за локаль у юзера? :) Работаете в своей.
делается так:
export LANGUAGE=en; rm -di непустойкаталог

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

11. "Проверить наличие файлов в директории"  +/
Сообщение от pavard (ok) on 14-Авг-17, 13:14 
для всех реализаций и их сообщений? сообщения команд не относятся к апи и: 1) могут меняться, 2) отличаться в разных реализациях, 3) это какой-то лютый здец так программировать. самого не коробит?
Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "Проверить наличие файлов в директории"  +/
Сообщение от ЫЫ on 14-Авг-17, 13:28 
> для всех реализаций и их сообщений? сообщения команд не относятся к апи
> и: 1) могут меняться, 2) отличаться в разных реализациях, 3) это
> какой-то лютый здец так программировать. самого не коробит?

Как так? Вы похоже только что с курсов телепатов...

Есть конкретная задача... Она решается.
Человек пишущий универсальный чекер на все случаи систем - и задающий такой вопрос- мягко говоря занимается не тем делом к которому у него есть талант.

Мое решение- быстро и эффективно, без оверхеда, решает задачу. на конкретной системе.
Ваши претензии- надуманны.

> и: 1) могут меняться,

если вы собираетесь использовать решение на многих системах неизвестной архитектуры- посмотрите как и было посоветовано исходник rm.

>2) отличаться в разных реализациях,

Человек собирается использовать свой скрипт на разных реализациях? Он вам это в личной переписке сказал? Или телепатия?


>3) это какой-то лютый здец так программировать. самого не коробит?

Это быстрое, простое и эффективное решение не претендующее на универсальность.
А почему это должно коробить?

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "Проверить наличие файлов в директории"  +/
Сообщение от ЫЫ on 14-Авг-17, 13:31 
>[оверквотинг удален]
> Как так? Вы похоже только что с курсов телепатов...
> Есть конкретная задача... Она решается.
> Человек пишущий универсальный чекер на все случаи систем - и задающий такой
> вопрос- мягко говоря занимается не тем делом к которому у него
> есть талант.
> Мое решение- быстро и эффективно, без оверхеда, решает задачу. на конкретной системе.
> Ваши претензии- надуманны.
>> и: 1) могут меняться,
> если вы собираетесь использовать решение на многих системах неизвестной архитектуры- посмотрите
> как и было посоветовано исходник rm.

И да... за адаптацию под любую из дополнительных систем- я возьму дополнительные деньги...
:)

Нет не треснет :)
>>2) отличаться в разных реализациях,
> Человек собирается использовать свой скрипт на разных реализациях? Он вам это в
> личной переписке сказал? Или телепатия?
>>3) это какой-то лютый здец так программировать. самого не коробит?
> Это быстрое, простое и эффективное решение не претендующее на универсальность.
> А почему это должно коробить?

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "Проверить наличие файлов в директории"  +/
Сообщение от ЫЫ on 14-Авг-17, 14:20 
>[оверквотинг удален]
> И да... за адаптацию под любую из дополнительных систем- я возьму дополнительные
> деньги...
> :)
> Нет не треснет :)
>>>2) отличаться в разных реализациях,
>> Человек собирается использовать свой скрипт на разных реализациях? Он вам это в
>> личной переписке сказал? Или телепатия?
>>>3) это какой-то лютый здец так программировать. самого не коробит?
>> Это быстрое, простое и эффективное решение не претендующее на универсальность.
>> А почему это должно коробить?

Ну и наконец..
"find DIR -maxdepth 0 -empty"
просто поражает своей привязкой к api, неотличаемостью на разных архитектурах и не коробимостью.. :)

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "Проверить наличие файлов в директории"  +/
Сообщение от pavard (ok) on 14-Авг-17, 23:48 
понимаю задел. тут даже если ты сам поймешь что не прав - об этом не скажешь и будешь доказывать провоту. если ты привык так писать - ок пиши.
Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

16. "Проверить наличие файлов в директории"  +/
Сообщение от ыы on 15-Авг-17, 06:16 
> понимаю задел. тут даже если ты сам поймешь что не прав -
> об этом не скажешь и будешь доказывать провоту. если ты привык
> так писать - ок пиши.

Ты похоже реально не понимаешь что ключи у программы- на разных платформах и разных реализациях могут быть разные... и нет принципиально никакой разницы между  тем что предложил я и тем что предложил ты...
Ну.. не понимаешь и не понимаешь... что ж тут поделаешь :)

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

6. "Проверить наличие файлов в директории"  +/
Сообщение от XAnder (ok) on 14-Авг-17, 11:35 
> [ $(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 — на непустом.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

21. "Проверить наличие файлов в директории"  +/
Сообщение от pavlinux (ok) on 18-Авг-17, 01:10 
> Есть ли более цивильное решение?

for i in `find / -type d`; do if [ `stat -c%s $i` -gt 6 ]; then echo $i FULL; else rmdir $i; fi; done;

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру