Ви говорите, що " ls pipeped to head займає жахливо багато часу".
Причиною цього не є ls
, а кількість файлів у вашому каталозі. Якщо у вас є 100 000 файлів в одному каталозі, будь-який спосіб вирішення цієї проблеми повинен отримати інформацію про всі 100 000 файлів, перш ніж вона зможе навіть подумати про їх сортування або друк будь-якого виводу.
Якщо це забирає занадто багато часу, справжнє рішення - розділити файли на кілька каталогів.
Якщо ви не можете поширити файли по декількох каталогах, чи є спосіб зменшити кількість файлів, які слід врахувати ? Наприклад, якщо назви файлів містять дату, можливо, ви можете включити підстановку, щоб системі не довелося сортувати 100 000 файлів. А може, вони пронумеровані послідовно? (Це може чи не допоможе, але варто спробувати.)
Скільки разів ви намагаєтесь це зробити? Можливо, варто зберегти / кешувати вихід для повторного використання .
Тепер питання.
Ви впевнені, що маєте на увазі "час створення", а не "змінити час" ? Більшість інструментів можуть відображати лише "зміни часу", а не "час створення".
Отримати "час створення" - це зовсім нова річ, яка вимагає файлової системи ext4 та деяких інструментів, які непросто встановити.
Якщо ви хочете змінити час
Час зміни (ctime коротко) означає час останнього зміни атрибутів файлу.
ls -c
сортування за ctime.
Ви хочете, щоб результат був у порядку зростання, а не по убыванию, тому вам потрібно також змінити результат з -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
очистити всі файли старше певного віку. Це означатиме, що ніякого роду не потрібно.