Быстрая команда ls - PullRequest
       98

Быстрая команда ls

36 голосов
/ 02 сентября 2008

Мне нужно получить список каталогов, содержащий около 2 миллионов файлов, но когда я выполняю команду ls, ничего не возвращается. Я ждал 3 часа. Я пробовал ls | tee directory.txt, но это, кажется, навсегда.

Я предполагаю, что сервер выполняет большую сортировку inode. Есть ли способ ускорить команду ls, чтобы просто получить список каталогов имен файлов? В настоящее время мне нет дела до размеров, дат, разрешений или тому подобного.

Ответы [ 18 ]

1 голос
/ 30 октября 2009

Некоторые наблюдения: Вы не упоминаете, на какой ОС вы работаете, что поможет указать, какую версию ls вы используете. Вероятно, это не вопрос «bash», а вопрос «ls». Я предполагаю, что вы используете GNU ls, который имеет некоторые функции, которые полезны в некоторых контекстах, но убивают вас в больших каталогах.

GNU ls Попытка иметь более красивое расположение столбцов. GNU ls пытается сделать разумное расположение всех имен файлов. В огромном каталоге это займет некоторое время и память.

Чтобы исправить это, вы можете попробовать:

ls -1 # вообще нет столбцов

найдите BSD ls где-нибудь, http://www.freebsd.org/cgi/cvsweb.cgi/src/bin/ls/ и используйте это в своих больших каталогах.

Используйте другие инструменты, такие как find

1 голос
/ 02 сентября 2008

Какой тип раздела вы используете?

Имея миллионы маленьких файлов в одном каталоге, было бы неплохо использовать JFS или ReiserFS, которые имеют лучшую производительность со многими файлами небольшого размера.

1 голос
/ 02 сентября 2008

Что попробовать:

Проверить, что у ls нет псевдонима?

alias ls

Возможно, попробуйте найти вместо этого?

find . \( -type d -name . -prune \) -o \( -type f -print \)

Надеюсь, это поможет.

1 голос
/ 10 октября 2014

Есть несколько способов получить список файлов:

Используйте эту команду, чтобы получить список без сортировки:

ls -U

или отправьте список файлов в файл, используя:

ls /Folder/path > ~/Desktop/List.txt
1 голос
/ 02 сентября 2008

Как насчет find ./ -type f (который найдет все файлы в текущем каталоге)? Снимите -type f, чтобы найти все.

0 голосов
/ 02 сентября 2008

Вы должны предоставить информацию о том, какую операционную систему и тип файловой системы вы используете. В некоторых версиях UNIX и некоторых файловых системах вы можете использовать команды ff и ncheck в качестве альтернативы.

0 голосов
/ 03 сентября 2008

Много других хороших решений здесь, но в интересах полноты:

echo *
0 голосов
/ 16 сентября 2008

Вы также можете использовать xargs . Просто передайте вывод от ls до xargs .

ls | xargs

Если это не сработает и приведенные выше примеры find не работают, попробуйте передать их по номеру xargs , поскольку это может помочь использованию памяти, которое может вызывать ваши проблемы.

...