Сколько стоит Ubuntu 14.04? [Дубликат]

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

1
задан 17 April 2014 в 18:18

0 ответов

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

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