[Linux] подсчет количества файлов в папке
![](/images/graemlins/grin.gif)
в общем да... этот метод будет давать ошибку, если есть файлы, в имени которых есть пробел(ы)
ls -1 | wc -l
Типа, линуксовый ls начал в трубу слать не одной колонкой?
---
"Аллах не ведёт людей неверных."
Оказывается, нет, в трубу шлет одной колонкой. Спасибо, я не знал.
![](/images/graemlins/grin.gif)
надо /bin/ls -b | wc -l
ну да, можно и без -1 тогда.
Ты явно не удосужился прочитать man, потому что $(ls | wc -l)
не равно числу файлов в "папке" ${HOME}.
---
"Аллах не ведёт людей неверных."
---
"Аллах не ведёт людей неверных."
Зачем -B?
---
"Аллах не ведёт людей неверных."
-B, --ignore-backups
do not list implied entries ending with ~
жесть. тогда ещё и -a наверное нужно
---
"Аллах не ведёт людей неверных."
-A делает то же, что -a, только без "." и "..".
Это погнутое.Спрашивают про Linux, поэтому, видимо, правильнее всё же -Ab.
Кстати, чем под линуксами заменить mkdep(1)?
Autotools не предлагать, ЭТО изучать не будут.
Думаю, та же участь постигнет и другое средство сильно сложнее mkdep.
Пока что предложил makedepend, но это какой-то отстой.
---
"Аллах не ведёт людей неверных."
В моём Линуксе есть mkdep.
если запускать в своей домашней директории, то -bA выдаёт на один .bash_profile~ больше, чем на самом деле.
отвечу в твоём стиле - man gcc
---
"Аллах не ведёт людей неверных."
![](/images/graemlins/grin.gif)
Видел грязный хак, основанный на этом, хак мне не понравился.
---
"Аллах не ведёт людей неверных."
zgrep -r 'count files' /usr/share/doc/HOWTO/*
правильно
find . -maepth 1 -xtype f | wc
---
...Я работаю антинаучным аферистом...
find . -maepth 1 -path ./\* -printf '\n' | wc -l
Вообще, хватит извращаться, а то скоро пойдут варианты
echo $$(find . -mindepth 1 -maepth 1 -exec echo "+1" \
---
"Аллах не ведёт людей неверных."
code: echo $$(find . -mindepth 1 -maepth 1 -exec echo "+1" \Каждый год вижу Контру как всё более и более опытного пользователя find
![](/images/graemlins/smile.gif)
Как тебе такой вариант?
echo $$(find -maepth 1 -printf +1)-1
а какая максимальная длина у выражения, которое может посчитать $ ?
![](/images/graemlins/smile.gif)
Ну, звиняйте тогда, мне лень лезть смотреть погнутые значения флагов.На AIX 5.3 и HPUX 11i/11i v2 тоже надо ls -Ab
Так что это не погнутое. Ну или не только погнутое.
получается, для минимальной надёжности и переносимости нужно на perl писать или типа того
perl <<'EOF'
opendir DIR, "." or die "$!";
for ($n=0; $F = readdir DIR; ($F =~ m/^\.\.?$/) || ($n++{};
closedir DIR;
print "$n\n";
EOF
Чтобы совсем все было правильно и выводилось число ФАЙЛОВ нужно писать так:
opendir DIR, "." or die "$!";
for ($n=0; $F = readdir DIR; (-d $F) || ($n++{};
closedir DIR;
print "$n\n";
Директория — это тоже файл.
Директория — это тоже файлПравда? Не знал... Тогда извиняйте. Когда создавал этот тред, предполагал подсчитать число файлов, исключая дирректории.
$ find . -printf +1
find: -printf: unknown option
---
"Аллах не ведёт людей неверных."
---
"Аллах не ведёт людей неверных."
нужно ещё пропускать '.' и '..'
ls -la | grep -v ^d | grep -v "^..$" | grep -v "^.$" | wc -l
file-tester '-d' будет рассматривать .. и . как дирректории и не будет их считать. Проверял. все работает правильно
> ls -la
Про -B и -b уже говорили.
Зачем второй и третий грепы непонятно.
Там Махмут что-то про слишком любящих Аллаха говорил...
В общем, нехорошее.
---
"Аллах не ведёт людей неверных."
$ find . -printf +1
find: -printf: unknown option
$ find --version
GNU find version 4.3.0
Features enabled: O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS
Man
В корневом каталоге твой код работает неправильно
Какого хера? У меня всё пашет.
> GNU find version 4.3.0
> Features enabled: O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS
$ find --version
find: unknown option -- -
find: unknown option -- v
find: unknown option -- e
find: unknown option -- r
find: unknown option -- i
find: unknown option -- o
find: unknown option -- n
usage: find [-H | -L | -P] [-hsx] [-f file] [file ...] [expression]
man, man.
---
"Аллах не ведёт людей неверных."
В теме сообщения сказано ведь, что Linux.
Удобный
Там даже sh нет.
---
"Аллах не ведёт людей неверных."
Если рассматривать Linux во втором значении, то sh и find там есть. Только find там удовлетворяет POSIX 2003 (с некоторыми отличиями) и о ключе --version там ничего не говорится.
Если рассматривать образцы того, что относят к дистрибутивам Linux, то и sh, и find там есть, и ключ --version у find там работает.
А ОС или не ОС — не важно.
i=0
for file_name in *; do [ -f $file_name ] && i=$$i+1; done
echo $i
Оставить комментарий
alekss
Есть ли какая-нибудь стандартная команда? Можно конечно извратиться и написать что-то типа этого: