Хотите отсортировать файлы по дате обновления, включая подкаталоги


17

Я хочу сортировать только файлы по датам обновления, включая подкаталоги.

Я узнал ls -lrtR | grep ^-. но, кажется, не сортировать по датам обновления.

И мне нужно сохранить этот список в файл. Является ли это возможным?

Apr 01 2010  InsideDoosanServiceImpl.class  // in A directory
Apr 08 2010  MainController.class  // in B directory
Apr 07 2010  RecommendController.class  // in B directory
Apr 01 2010  MainDao.class  // in B directory

Я имею в виду, что весь список не упорядочен по дате, а сначала упорядочен по папке и упорядочен по дате.

Я хочу сначала упорядочить список по дате, включая все подкаталоги.

Ответы:


12

Я не уверен, что именно вы подразумеваете под этим update dates, но вы используете -rвариант, который, по мнению человека, делает это -

-r Обратный порядок сортировки, чтобы получить обратный лексикографический порядок или самые старые записи первыми (или самые большие файлы последними, если объединены с сортировкой по размеру)

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

ls -lRt

Если вам не нужны все другие вещи, перечисленные выше, lsвы можете использовать -

ls -1Rt

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

ls -lRt > sortedfile.list

Обновить:

find . -type f -exec ls -lt {} +

Я имею в виду последний раз, когда файл был изменен :)

Результат сортировки упорядочен по папке и дате. Я хочу отсортировать по дате и папке .. это возможно?

Извините, не могли бы вы показать мне некоторые результаты? Я не совсем следил за сортировкой папок, если вы использовали ls -lrt.
Джайпал Сингх

// Jaypal Singh, я обновил свой вывод до моего вопроса ↑ :). Я действительно надеюсь, что вы понимаете это, и извините за мой плохой английский.

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

19

С помощью ls -R будет возвращать каталоги, а -t сортировать по модификации. Однако он рекурсивно просматривает каталоги и применяет -t к каждому каталогу. Он не накапливает все файлы из всех каталогов, а затем сортирует. (Насколько я понимаю, последнее то что ты хочешь)

С помощью gnu find (1) вы можете указать формат вывода, включающий количество секунд с начала эпохи и имя файла, затем вы можете передать это в sort (1).

find . -type f -printf "%T@ %f\n" | sort -n > out.txt

Да, GNU findэто помогает. Но ОП работает на AIXмашинах такGNU find не был доступен для него.
Джайпал Сингх

Жаль, что lsнельзя накапливать файлы перед сортировкой. lsэто так быстро , по сравнению сfind .
Натан ReinstateMonica Arthur

ls и find читает те же данные, поэтому я не могу представить причину, по которой ls должен быть значительно быстрее, чем find. В моей системе поиск в 5 раз быстрее (поиск примерно в полумиллионе файлов)
Рольф Рандер

7
Возможно, вы захотите указать полную дату / время, а не только имя файла, но и путь в выходных данных, в этом случае измените строку форматирования: find . -type f -printf "%T@ %Tc %p\n" | sort -n > out.txtполучая выходные данные, например 1427913836.2330520210 wed 1 apr 2015 20:43:56 ./subdir/file.txt.
Карл

Отлично. Это действительно помогло мне. Я искал способ сортировки в подкаталогах целую вечность!
бху Буе видя
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.