Что было бы лучшим способом перечислить 100 первых файлов в каталоге, отсортированном по созданной метке времени (самый старый первый). Каталог довольно большой (около 100000 файлов).
Ls конвейер голова занимает очень много времени , чтобы закончить.
Редактировать:
- Файловая система ext3.
- Ограничение количества файлов в папке не стоит усилий, так как это будет редкая операция «очистки», и файлы создаются сторонним программным обеспечением.
- Использование времени изменения файла вместо времени создания обеспечивает и приемлемое решение.
find -mtime +<number of days> -delete
очистить все файлы старше определенного возраста. Это будет означать, что сортировка не нужна.Ответы:
Вы говорите , что « Ls конвейер голова занимает очень много времени , чтобы закончить».
Причиной этого не является
ls
, а количество файлов в вашем каталоге. Если у вас есть 100 000 файлов в одном каталоге, любой способ решения этой проблемы должен был бы получить информацию обо всех 100 000 файлов, прежде чем он мог даже подумать о сортировке их или печати какого-либо вывода.Если это занимает слишком много времени, реальное решение - разделить файлы на несколько каталогов.
Если вы не можете распределить файлы по нескольким каталогам, можете ли вы как-то сузить число файлов для рассмотрения ? например, если в именах файлов указана дата, возможно, вы можете включить подстановочный знак, чтобы система не сортировала 100 000 файлов. Или, может быть, они последовательно пронумерованы? (Это может или не может помочь, но стоит попробовать.)
Сколько раз вы пытаетесь это сделать? Может быть, стоит сохранить / кэшировать вывод для повторного использования .
Теперь вопрос.
Вы уверены, что имеете в виду «время создания», а не «время изменения» ? Большинство инструментов могут отображать только «время изменения», а не «время создания».
Получение «времени создания» - это очень новая вещь, для которой требуется файловая система ext4 и некоторые инструменты, которые нелегко установить.
Если вы хотите изменить время
Время изменения (для краткости ctime) означает время, когда атрибуты файла последний раз изменялись.
ls -c
сортирует по времени.Вы хотите, чтобы вывод был в порядке возрастания, а не в порядке убывания, поэтому вам нужно также изменить вывод с помощью
-r
опции.Так что вы можете сделать это так:
Более длинное решение той же проблемы с использованием
stat
:но это работает медленнее, чем
ls -cr
в моей системе.Если вы хотите время модификации
Время изменения (для краткости mtime) означает время последнего изменения содержимого файла.
ls -t
сортирует по mtime.Изменить
ls -cr
наls -tr
(лучший вариант) или изменитьstat -c $'%Z\t%n'
наstat -c $'%Y\t%n'
.Если вам нужно время создания
(кратко для краткости)
Это сложнее.
Сначала убедитесь, что каталог находится в файловой системе, отформатированной с использованием
ext4
. Вы можете использовать,tune2fs -l <device name>
чтобы проверить это.Затем появился новый
stat
формат%W
, который может вам помочь. Чтобы получить его, вам необходимо скачать версию GNU Coreutils, выпущенную в октябре 2010 года или позже, распаковать ее, скомпилировать и установить.Затем, в зависимости от вашего ядра, это может сработать (еще не пробовал).
Смотрите также:
Если вы получаете ошибки о
"'$\t'
Запись
'$\t'
требуетbash
илиzsh
: она не будет работать вdash
илиsh
на Ubuntu. Если вам действительно нужно использовать эти оболочки, то вам нужно изменить какие - либо\t
до Ctrl+ V, Tabи удалите ведущий$
от просто до открытия цитаты.источник
Другой способ, если вы обнаружите, что делаете что-то сегодня, может иметь отношение к вашим проблемам с производительностью:
Теоретически это должно начать выводить намного быстрее, но я думаю, это зависит от того, откуда исходит задержка.
ls
Для сортировки файлов может потребоваться много времени.источник
head
на самом деле выходит, как только он прочитал достаточно ввода. Попробуйте запустить оба сtime
передней. Вhead
любом случае версия намного быстрее в моей системе.