Хочете сортувати файли за датою оновлення, включаючи підкаталоги


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) ви можете вказати формат виводу, щоб включити кількість секунд з часу епохи та ім'я файлу, а потім ви зможете передати це для сортування (1).

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

Так, GNU findце допомагає. Але ОП працює на AIXмашинах, тому GNU findйому не було доступно.
jaypal singh

Це занадто погано, lsне можна змушувати накопичувати файли перед сортуванням. lsце так швидко , по порівнянні з find.
Nathan ReinstateMonica Arthur

lsі findчитає ті самі дані, тож я не можу собі уявити, щоб причина була значно швидшою, ніж знаходити. У моїй системі пошук у 5 разів швидший (пошук приблизно через півмільйона файлів)
Rolf Rander

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.
Карл

Чудово. Це дійсно мені допомогло. Я шукав спосіб впорядкувати підкаталоги за віками!
bhu Boue vidya
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.