Вы говорите , что « Ls конвейер голова занимает очень много времени , чтобы закончить».
Причиной этого не является ls
, а количество файлов в вашем каталоге. Если у вас есть 100 000 файлов в одном каталоге, любой способ решения этой проблемы должен был бы получить информацию обо всех 100 000 файлов, прежде чем он мог даже подумать о сортировке их или печати какого-либо вывода.
Если это занимает слишком много времени, реальное решение - разделить файлы на несколько каталогов.
Если вы не можете распределить файлы по нескольким каталогам, можете ли вы как-то сузить число файлов для рассмотрения ? например, если в именах файлов указана дата, возможно, вы можете включить подстановочный знак, чтобы система не сортировала 100 000 файлов. Или, может быть, они последовательно пронумерованы? (Это может или не может помочь, но стоит попробовать.)
Сколько раз вы пытаетесь это сделать? Может быть, стоит сохранить / кэшировать вывод для повторного использования .
Теперь вопрос.
Вы уверены, что имеете в виду «время создания», а не «время изменения» ? Большинство инструментов могут отображать только «время изменения», а не «время создания».
Получение «времени создания» - это очень новая вещь, для которой требуется файловая система ext4 и некоторые инструменты, которые нелегко установить.
Если вы хотите изменить время
Время изменения (для краткости ctime) означает время, когда атрибуты файла последний раз изменялись.
ls -c
сортирует по времени.
Вы хотите, чтобы вывод был в порядке возрастания, а не в порядке убывания, поэтому вам нужно также изменить вывод с помощью -r
опции.
Так что вы можете сделать это так:
ls -cr | head -n 100
Более длинное решение той же проблемы с использованием stat
:
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%Z\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
но это работает медленнее, чем 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 года или позже, распаковать ее, скомпилировать и установить.
Затем, в зависимости от вашего ядра, это может сработать (еще не пробовал).
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%W\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
Смотрите также:
Если вы получаете ошибки о "'$\t'
Запись '$\t'
требует bash
или zsh
: она не будет работать в dash
или sh
на Ubuntu. Если вам действительно нужно использовать эти оболочки, то вам нужно изменить какие - либо \t
до Ctrl+ V, Tabи удалите ведущий $
от просто до открытия цитаты.
find -mtime +<number of days> -delete
очистить все файлы старше определенного возраста. Это будет означать, что сортировка не нужна.