Дополнительно
Как получить количество файлов в каталоге с помощью командной строки?
У меня есть каталог с большим количеством файлов. Я не вижу переключателя ls
для получения количества файлов. Есть ли какая-то магия командной строки, чтобы получить количество файлов?
195
17
Используя широкое определение понятия "файл"
(обратите внимание, что оно не учитывает скрытые файлы и предполагает, что имена файлов не содержат символов новой строки).
Чтобы включить скрытые файлы (кроме
.
и..
) и избежать проблем с символами новой строки, каноническим способом является:Или рекурсивно:
Для узкого определения файла:
...
...
P. S.: Обратите внимание Общ -&ЛТ;номер один> | туалетом -&ЛТ;букву-Л>
Возможно, наиболее полный ответ, используя
пара ЛС
/туалет
- этоесли вы хотите рассчитывать Dot-файлов, и
в противном случае.
-А
- посчитать Dot-файлов, но опустить.
и..
.-м
сделатьЛС
заменить неграфические символы, особенно символ новой строки, с?
, вывод сделать 1 строку для каждого файлаЧтобы получить одну строку вывода команды
ls
в терминал (т. е. без закачивания втуалет
),-1
параметр должен быть добавлен.(поведение команды
ls
протестирован с coreutils 8.23)Если вы знаете, что текущий каталог содержит хотя бы один не скрытый файл:
Очевидно, что это можно обобщить на любой glob.
В сценарии это имеет иногда неприятный побочный эффект перезаписи позиционных параметров. Это можно обойти, используя вложенную оболочку или функцию (версия Bourne/POSIX), например:
Альтернативным решением является
$(ls -d -- * | wc -l)
. Если glob -*
, команда может быть сокращена до$(ls | wc -l)
. Парсинг выводаls
всегда вызывает у меня беспокойство, но здесь он должен работать, если только имена ваших файлов не содержат новых строк, или вашls
их экранирует. А$(ls -d -- * 2>/dev/null | wc -l)
имеет преимущество в том, что изящно обрабатывает случай несовпадения glob (т.е. возвращает 0 в этом случае, тогда как методset *
требует сложной проверки, если glob может быть пустым).Если имена файлов могут содержать символы новой строки, альтернативой может быть использование
$(ls -d ./* | grep -c /)
.Любое из этих решений, основанное на передаче расширения glob в
ls
, может завершиться ошибкой argument list too long при большом количестве подходящих файлов.Я нашел
дю --дескрипторы полезного, но я'м не знаете, какую версию " дю " она требует. Он должен быть существенно быстрее, чем альтернативные подходы, используя
найтии
туалет`.На Ubuntu 17.10, следующие работы:
Совмещать с
| сортировка -НР
для сортировки по убыванию по количеству, содержащий индексные дескрипторы.При использовании пары Общ/туалетом, если мы добавляем -у него будет гораздо быстрее (не сортировать ).
После установки дерева команд, просто введите:
"дерево"
Если вы тоже хотите, чтобы скрытые файлы:
дерево -
Если вы используете Дебиан / Минт / Убунту Linux введите следующую команду для установки дерева команд:
судо apt-получить установку дерева
Опция -L используется для указания максимального уровня отображение дерева каталогов. Дерево команд не только подсчитать количество файлов, но и каталогов, учитывая, как много уровней дерева каталога, как вам нравится.
-параметр maxdepth 1
сделает его нерекурсивный,найти
является рекурсивным по умолчанию-тип F
будет содержать только файлы| туалет -с
подсчет символовНет трубы, нет строки копировать, без вилки, просто Баш один лайнер
Здесь's и другую технику вдоль линии один запостил Жиль:
которая создает массив с 13,923 элементов (если это's сколько файлов есть).
Это может только список файлов в текущем каталоге.
На Linux, чтобы сделать команду очень надежный и обрабатывать файлы, которые могут иметь строк в свое имя, используйте это:
Это спасает нас от испытание выходной парсинг команды
ls
.Связанные:
Попробуйте это, я надеюсь, этот ответ поможет вам
Вы можете проверить с:
Совершенствование некоторых ответов, прежде чем но на этот раз делает явно.
Это'ы достойны видеть использование ваши близкие команды, как
хвост
ирезать
. Также обратите внимание, что дерево не доступен по умолчанию. Команду над первым захватить информацию о каталоге 1-го уровня, тогда вам в последней строкехвоста -Н 1
где наша цель, и в конечном итоге срезать
, чтобы занять третье слово.Например, размещая в
/
:То, что задавать количество каталогов?
Используйте команду
дерево
, просто: