как я могу просмотреть файл строго по дате входа/создан/загружен [dубликат]

Этот драйвер, по-видимому, только для 12.10 и, скорее всего, не будет работать с более старым ядром в 12.04.

Вам нужно будет загрузить исходный код и перекомпилировать его для вашего ядра.

11
задан 28 January 2011 в 19:38

16 ответов

Вы говорите, что «ls piped to head занимает очень много времени для завершения».

Причиной этого является не ls, а количество файлов в вашем каталоге. Если у вас есть 100 000 файлов в одном каталоге, любой способ решить эту проблему должен получить информацию обо всех 100 000 файлах, прежде чем он сможет даже подумать об их сортировке или распечатать любой вывод.

ls [ ! d1]

Если вы не можете распространять файлы по нескольким каталогам, можно ли каким-либо образом ограничить количество файлов для рассмотрения? например если имена файлов включают дату, возможно, вы можете включить подстановочный знак, чтобы системе не пришлось сортировать 100 000 файлов. Или, может быть, они последовательно пронумерованы? (Это может или не поможет, но стоит попробовать.)

Сколько раз вы пытаетесь это сделать? можно каким-либо образом ограничить количество файлов, чтобы рассмотреть .

Теперь вопрос.

Вы конечно, вы имеете в виду «время создания», а не «изменить время»?

Получение «времени создания» - это очень новая вещь, для которой требуется файловая система ext4 и некоторые инструменты, которые нелегко установить .

Если вы хотите изменить время

Время изменения (ctime для краткости) означает время, в течение которого атрибуты последнего файла были изменены.

ls -c сортирует по ctime.

Вы хотите, чтобы результат был в порядке возрастания, а не в порядке убывания, поэтому вам нужно также отменить вывод с помощью опции -r.

So вы можете сделать это следующим образом:

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'.

Если вам нужно время создания

(crtim e для краткости)

Это сложнее.

Сначала убедитесь, что каталог находится в файловой системе, которая отформатирована с помощью 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/^\.\///'

Смотрите также:

stat read crtime from ext4 a ruby ​​script для доступа к crtime в Linux

Если вам нужно время создания

Для обозначения '$\t' требуется bash или zsh: он не будет работать в dash или sh на Ubuntu. Если вам действительно нужно использовать эти оболочки, вам нужно будет изменить любой \t на Ctrl + V, Tab и удалить ведущую $ с момента, когда начнется цитата.

14
ответ дан 25 July 2018 в 11:06
  • 1
    Возможно, он не работает с ext4. Я запускаю Ubuntu 10.04 на всех моих машинах, но работать jfs на несколько дисков. Насколько я знаю спи поддерживает создание метки времени. – jwernerny 28 January 2011 в 17:23
  • 2
    В самом деле. Мы знаем, что он не поддерживается на ext3 и поддерживается на ext4. Быстрый поиск предполагает, что он может работать с zfs или FreeBSD ufs, но ни один из них не распространен на Ubuntu! Не уверен в jfs или xfs или что-то еще. Будем рады услышать больше, если вы найдете информацию / ссылки. – Mikel 28 January 2011 в 18:43
  • 3
    Спасибо за такой подробный ответ и за напоминание, будет писать более конкретные вопросы ;) "найти" оказался победителем производительность-мудрый, ФС-Тип оказался в ext3. – user 28 January 2011 в 19:30

Вы говорите, что «ls piped to head занимает очень много времени для завершения».

Причиной этого является не ls, а количество файлов в вашем каталоге. Если у вас есть 100 000 файлов в одном каталоге, любой способ решить эту проблему должен получить информацию обо всех 100 000 файлах, прежде чем он сможет даже подумать об их сортировке или распечатать любой вывод.

ls [ ! d1]

Если вы не можете распространять файлы по нескольким каталогам, можно ли каким-либо образом ограничить количество файлов для рассмотрения? например если имена файлов включают дату, возможно, вы можете включить подстановочный знак, чтобы системе не пришлось сортировать 100 000 файлов. Или, может быть, они последовательно пронумерованы? (Это может или не поможет, но стоит попробовать.)

Сколько раз вы пытаетесь это сделать? можно каким-либо образом ограничить количество файлов, чтобы рассмотреть .

Теперь вопрос.

Вы конечно, вы имеете в виду «время создания», а не «изменить время»?

Получение «времени создания» - это очень новая вещь, для которой требуется файловая система ext4 и некоторые инструменты, которые нелегко установить .

Если вы хотите изменить время

Время изменения (ctime для краткости) означает время, в течение которого атрибуты последнего файла были изменены.

ls -c сортирует по ctime.

Вы хотите, чтобы результат был в порядке возрастания, а не в порядке убывания, поэтому вам нужно также отменить вывод с помощью опции -r.

So вы можете сделать это следующим образом:

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'.

Если вам нужно время создания

(crtim e для краткости)

Это сложнее.

Сначала убедитесь, что каталог находится в файловой системе, которая отформатирована с помощью 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/^\.\///'

Смотрите также:

stat read crtime from ext4 a ruby ​​script для доступа к crtime в Linux

Если вам нужно время создания

Для обозначения '$\t' требуется bash или zsh: он не будет работать в dash или sh на Ubuntu. Если вам действительно нужно использовать эти оболочки, вам нужно будет изменить любой \t на Ctrl + V, Tab и удалить ведущую $ с момента, когда начнется цитата.

14
ответ дан 1 August 2018 в 17:52

Вы говорите, что "ЛС передается в голову ужасно много времени".

причиной этого является не ls, но число файлов в каталоге. Если у вас есть 100 000 файлов в одном каталоге, любой способ решения этой проблемы должны были бы получить информацию о всех 100 000 файлов, прежде чем он мог даже думать об их сортировки или печать любой продукции.

общ

если Вы не можете распространять файлы в течение нескольких каталогах, вы можете сузить количество файлов для рассмотрения? например, если имена файлов содержат дату, может быть, вы можете включить подстановочные поэтому система не должна вроде 100 000 файлов. Или, может быть, они последовательно нумеруются? (Это может или не может помочь, но стоит попробовать.)

сколько раз вы пытались сделать это? есть ли способ, вы можете сузить количество файлов для рассмотрения.

теперь вопрос.

ты уверен, что "время создания" и не "изменение времени"? Большинство инструментов может отображать только "время перемен", а не "Время создания".

получение "время создания" - это очень новая вещь, которая требуется для ext4 файловой системы, и некоторые инструменты, которые не так легко установить.

[dиода d17]если вы хотите изменить время[!dиода d17]

время меняться (временные метки 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/^\.\///'

но это работает медленнее, чем нажать [F8] на моей системе.

, если вы хотите изменить время!д18]

время модификации файла (mtime для коротких) означает, что содержимое файла Последнее изменение.

[F9] и сортирует время изменения.

изменения [F10] для того чтобы ls -tr (лучший вариант) или [F12] для [от f13].

если вам нужна создание время!д32]

(crtime для краткости)

это сложнее.

во-первых, убедитесь, директории на файловую систему, отформатированный с помощью ext4. Вы можете использовать tune2fs -l <device name>, чтобы проверить это.

то есть новый формат stat называют [f17 в], которые могут помочь вам здесь. Чтобы сделать это, вам придется скачать версию для 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/^\.\///' [dрайвер d41]смотрите также:[!dрайвер d41] стат читать crtime из системы ext4 сценарий Рубиновой получить доступ к crtime на Linux

если вам нужна создание время!d33]

обозначение [зг19] требуется [20 фунтов] или [клавиши f21]: он не будет работать в dash или sh в Ubuntu. Если вам действительно нужно использовать эти снаряды, вам понадобится изменить какие-либо \t на Ctrl+V, в вкладке и снять ведущую [f25 привод датчика] от как раз перед открывающей кавычки.

14
ответ дан 3 August 2018 в 07:50

Вы говорите, что «ls piped to head занимает очень много времени для завершения».

Причиной этого является не ls , а количество файлов в вашем каталоге , Если у вас есть 100 000 файлов в одном каталоге, любой способ решить эту проблему должен получить информацию обо всех 100 000 файлах, прежде чем он сможет даже подумать о их сортировке или распечатать любой вывод.

Если он слишком длинный , реальное решение состоит в том, чтобы разделить файлы по нескольким каталогам.

Если вы не можете распространять файлы по нескольким каталогам, можно каким-либо образом ограничить количество файлов, чтобы рассмотреть [ ! d28]? например если имена файлов включают дату, возможно, вы можете включить подстановочный знак, чтобы системе не пришлось сортировать 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 '/ /\\\\\\' /  

, но это работает медленнее, чем ls -cr в моей системе.


Если вы хотите время модификации

Время модификации (короткое время mtime) означает время, в течение которого содержимое файла было изменено последним.

ls -t сортирует по mtime.

Измените ls -cr на ls -tr (лучший вариант) или измените stat -c $ '% Z \ t% n ' to stat -c $'% Y \ t% n '.


Если вам нужно время создания

(crtime для краткости)

Это сложнее.

Сначала убедитесь, что каталог находится в файловой системе, которая отформатирована с использованием ext4 . Вы можете использовать tune2fs -l & lt; имя устройства & gt; , чтобы проверить это.

Затем появляется новый 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 и удалите ведущую $ только перед началом цитаты.

14
ответ дан 4 August 2018 в 09:51

Вы говорите, что «ls piped to head занимает очень много времени для завершения».

Причиной этого является не ls , а количество файлов в вашем каталоге , Если у вас есть 100 000 файлов в одном каталоге, любой способ решить эту проблему должен получить информацию обо всех 100 000 файлах, прежде чем он сможет даже подумать о их сортировке или распечатать любой вывод.

Если он слишком длинный , реальное решение состоит в том, чтобы разделить файлы по нескольким каталогам.

Если вы не можете распространять файлы по нескольким каталогам, можно каким-либо образом ограничить количество файлов, чтобы рассмотреть [ ! d28]? например если имена файлов включают дату, возможно, вы можете включить подстановочный знак, чтобы системе не пришлось сортировать 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 '/ /\\\\\\' /  

, но это работает медленнее, чем ls -cr в моей системе.


Если вы хотите время модификации

Время модификации (короткое время mtime) означает время, в течение которого содержимое файла было изменено последним.

ls -t сортирует по mtime.

Измените ls -cr на ls -tr (лучший вариант) или измените stat -c $ '% Z \ t% n ' to stat -c $'% Y \ t% n '.


Если вам нужно время создания

(crtime для краткости)

Это сложнее.

Сначала убедитесь, что каталог находится в файловой системе, которая отформатирована с использованием ext4 . Вы можете использовать tune2fs -l & lt; имя устройства & gt; , чтобы проверить это.

Затем появляется новый 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 и удалите ведущую $ только перед началом цитаты.

14
ответ дан 5 August 2018 в 17:36

Вы говорите, что «ls piped to head занимает очень много времени для завершения».

Причиной этого является не ls , а количество файлов в вашем каталоге , Если у вас есть 100 000 файлов в одном каталоге, любой способ решить эту проблему должен получить информацию обо всех 100 000 файлах, прежде чем он сможет даже подумать о их сортировке или распечатать любой вывод.

Если он слишком длинный , реальное решение состоит в том, чтобы разделить файлы по нескольким каталогам.

Если вы не можете распространять файлы по нескольким каталогам, можно каким-либо образом ограничить количество файлов, чтобы рассмотреть [ ! d28]? например если имена файлов включают дату, возможно, вы можете включить подстановочный знак, чтобы системе не пришлось сортировать 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 '/ /\\\\\\' /  

, но это работает медленнее, чем ls -cr в моей системе.


Если вы хотите время модификации

Время модификации (короткое время mtime) означает время, в течение которого содержимое файла было изменено последним.

ls -t сортирует по mtime.

Измените ls -cr на ls -tr (лучший вариант) или измените stat -c $ '% Z \ t% n ' to stat -c $'% Y \ t% n '.


Если вам нужно время создания

(crtime для краткости)

Это сложнее.

Сначала убедитесь, что каталог находится в файловой системе, которая отформатирована с использованием ext4 . Вы можете использовать tune2fs -l & lt; имя устройства & gt; , чтобы проверить это.

Затем появляется новый 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 и удалите ведущую $ только перед началом цитаты.

14
ответ дан 7 August 2018 в 10:36

Вы говорите, что «ls piped to head занимает очень много времени для завершения».

Причиной этого является не ls , а количество файлов в вашем каталоге , Если у вас есть 100 000 файлов в одном каталоге, любой способ решить эту проблему должен получить информацию обо всех 100 000 файлах, прежде чем он сможет даже подумать о их сортировке или распечатать любой вывод.

Если он слишком длинный , реальное решение состоит в том, чтобы разделить файлы по нескольким каталогам.

Если вы не можете распространять файлы по нескольким каталогам, можно каким-либо образом ограничить количество файлов, чтобы рассмотреть [ ! d28]? например если имена файлов включают дату, возможно, вы можете включить подстановочный знак, чтобы системе не пришлось сортировать 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 '/ /\\\\\\' /  

, но это работает медленнее, чем ls -cr в моей системе.


Если вы хотите время модификации

Время модификации (короткое время mtime) означает время, в течение которого содержимое файла было изменено последним.

ls -t сортирует по mtime.

Измените ls -cr на ls -tr (лучший вариант) или измените stat -c $ '% Z \ t% n ' to stat -c $'% Y \ t% n '.


Если вам нужно время создания

(crtime для краткости)

Это сложнее.

Сначала убедитесь, что каталог находится в файловой системе, которая отформатирована с использованием ext4 . Вы можете использовать tune2fs -l & lt; имя устройства & gt; , чтобы проверить это.

Затем появляется новый 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 и удалите ведущую $ только перед началом цитаты.

14
ответ дан 9 August 2018 в 21:41

Вы говорите, что «ls piped to head занимает очень много времени для завершения».

Причиной этого является не ls , а количество файлов в вашем каталоге , Если у вас есть 100 000 файлов в одном каталоге, любой способ решить эту проблему должен получить информацию обо всех 100 000 файлах, прежде чем он сможет даже подумать об их сортировке или распечатать любой вывод.

Если он слишком длинный , реальное решение состоит в том, чтобы разделить файлы по нескольким каталогам.

Если вы не можете распространять файлы по нескольким каталогам, можно каким-либо образом ограничить количество файлов, чтобы рассмотреть [ ! d28]? например если имена файлов включают дату, возможно, вы можете включить подстановочный знак, чтобы системе не пришлось сортировать 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 '/ /\\\\\\' /  

, но это работает медленнее, чем ls -cr в моей системе.


Если вы хотите время модификации

Время модификации (короткое время mtime) означает время, в течение которого содержимое файла было изменено последним.

ls -t сортирует по mtime.

Измените ls -cr на ls -tr (лучший вариант) или измените stat -c $ '% Z \ t% n ' to stat -c $'% Y \ t% n '.


Если вам нужно время создания

(crtime для краткости)

Это сложнее.

Сначала убедитесь, что каталог находится в файловой системе, которая отформатирована с использованием ext4 . Вы можете использовать tune2fs -l & lt; имя устройства & gt; , чтобы проверить это.

Затем появляется новый 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 и удалите ведущую $ только перед началом цитаты.

14
ответ дан 15 August 2018 в 11:11
  • 1
    Возможно, он не может работать с ext4. Я запускаю Ubuntu 10.04 на всех своих машинах, но запускаю JFS на нескольких дисках. AFAIK JFS поддерживает метки времени создания. – jwernerny 28 January 2011 в 17:23
  • 2
    В самом деле. Мы знаем, что он не поддерживается на ext3 и поддерживается на ext4. Быстрый поиск предполагает, что он может работать с zfs или FreeBSD ufs, но ни один из них не распространен на Ubuntu! Не уверен в jfs или xfs или что-то еще. Будем рады услышать больше, если вы найдете информацию / ссылки. – Mikel 28 January 2011 в 18:43
  • 3
    Спасибо за этот очень всеобъемлющий ответ и за тонкое напоминание, чтобы писать более конкретные вопросы;) & quot; Найти & quot; оказался победителем по производительности, fs-тип оказался ext3. – user 28 January 2011 в 19:30

Другим способом, если это можно было бы сделать сегодня, может быть уместно для ваших проблем с производительностью:

I=0; ls -cr /dir/ | while read file; do I=`expr $I + 1`; echo "$file"; if [ $I == 100 ]; then break; fi; done

Это должно теоретически начать выдавать намного быстрее, но я думаю, что это зависит от того, откуда происходит отставание. Для сортировки файлов может потребоваться много времени ls.

2
ответ дан 25 July 2018 в 11:06
  • 1
    Я сомневаюсь в этом. head на самом деле выходит, как только он прочитал достаточно информации. Попробуйте запустить оба с time на фронте. В head версия намного быстрей во всяком случае на моей системе. – Mikel 29 January 2011 в 02:36

Другим способом, если это можно было бы сделать сегодня, может быть уместно для ваших проблем с производительностью:

I=0; ls -cr /dir/ | while read file; do I=`expr $I + 1`; echo "$file"; if [ $I == 100 ]; then break; fi; done

Это должно теоретически начать выдавать намного быстрее, но я думаю, что это зависит от того, откуда происходит отставание. Для сортировки файлов может потребоваться много времени ls.

2
ответ дан 1 August 2018 в 17:52
  • 1
    Я сомневаюсь в этом. head фактически выходит, как только он считывает достаточно ввода. Попробуйте запустить оба с time спереди. В любом случае версия head намного быстрее в моей системе. – Mikel 29 January 2011 в 02:36

если нашли другой способ делать вещи сегодня могут быть связаны с вопросами производительности:

I=0; ls -cr /dir/ | while read file; do I=`expr $I + 1`; echo "$file"; if [ $I == 100 ]; then break; fi; done

, которая в теории должна начать выводить намного быстрее, но я предполагаю, что это зависит от того, где отставание идет от. Это может быть просто принимая ls долгое время для сортировки файлов.

2
ответ дан 3 August 2018 в 07:50
  • 1
    Я сомневаюсь в этом. head на самом деле выходит, как только он прочитал достаточно информации. Попробуйте запустить оба с time на фронте. В head версия намного быстрей во всяком случае на моей системе. – Mikel 29 January 2011 в 02:36

Еще один способ, который можно сделать сегодня, может быть уместен для ваших проблем с производительностью:

  I = 0;  ls -cr / dir / |  при чтении файла;  do I = `expr $ I + 1`;  echo "$ file";  если [$ I == 100];  затем перерыв;  Fi;  done  

Это должно теоретически начать выводить намного быстрее, но я думаю, что это зависит от того, откуда происходит отставание. Для сортировки файлов может потребоваться длительное время ls .

2
ответ дан 4 August 2018 в 09:51

Еще один способ, который можно сделать сегодня, может быть уместен для ваших проблем с производительностью:

  I = 0;  ls -cr / dir / |  при чтении файла;  do I = `expr $ I + 1`;  echo "$ file";  если [$ I == 100];  затем перерыв;  Fi;  done  

Это должно теоретически начать выдавать намного быстрее, но я думаю, что это зависит от того, откуда происходит отставание. Для сортировки файлов может потребоваться длительное время ls .

2
ответ дан 5 August 2018 в 17:36

Еще один способ, который можно сделать сегодня, может быть уместен для ваших проблем с производительностью:

  I = 0;  ls -cr / dir / |  при чтении файла;  do I = `expr $ I + 1`;  echo "$ file";  если [$ I == 100];  затем перерыв;  Fi;  done  

Это должно теоретически начать выводить намного быстрее, но я думаю, что это зависит от того, откуда происходит отставание. Для сортировки файлов может потребоваться длительное время ls .

2
ответ дан 7 August 2018 в 10:36

Еще один способ, который можно сделать сегодня, может быть уместен для ваших проблем с производительностью:

  I = 0;  ls -cr / dir / |  при чтении файла;  do I = `expr $ I + 1`;  echo "$ file";  если [$ I == 100];  затем перерыв;  Fi;  done  

Это должно теоретически начать выдавать намного быстрее, но я думаю, что это зависит от того, откуда происходит отставание. Для сортировки файлов может потребоваться длительное время ls .

2
ответ дан 9 August 2018 в 21:41

Еще один способ, который можно сделать сегодня, может быть уместен для ваших проблем с производительностью:

  I = 0;  ls -cr / dir / |  при чтении файла;  do I = `expr $ I + 1`;  echo "$ file";  если [$ I == 100];  затем перерыв;  Fi;  done  

Это должно теоретически начать выводить намного быстрее, но я думаю, что это зависит от того, откуда происходит отставание. Для сортировки файлов может потребоваться длительное время ls .

2
ответ дан 15 August 2018 в 11:11
  • 1
    Я сомневаюсь в этом. head фактически завершает работу, как только считывает достаточно ввода. Попробуйте запустить оба с time спереди. Версия head в моей системе намного быстрее. – Mikel 29 January 2011 в 02:36

Другие вопросы по тегам:

Похожие вопросы: