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


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.