2014-01-14 3 views
2

Мне нужно объединить их с командами, чтобы отсортировать список по дате, созданной с указанным «именем файла».Linux объединить файлы сортировки по дате и даному имени файла

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

Ls -lrt

и найти файл по имени с

находке. -name "filename *"

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

[EDIT] Не отсортировано enter image description here

ответ

6
find . -name "filename" -printf '%TY:%Tm:%Td %TH:%Tm %h/%f\n' | sort 

Забудьте о xargs. «Найти» и «сортировать» - это все необходимые инструменты.

+0

Спасибо, вы право, и это проще – Steffi

+0

Не уверен, что я согласен с более легким, если у вас нет рабочих знаний формата '-printf' :) –

+1

Ну, вы здесь, чтобы узнать все, не так ли? Я даже не помнил, что у find есть опция -printf, пока я не проверил «man find» и не заметил. – Torben

4

Мое предположение было бы использовать xargs:

find . -name 'filename*' -print0 | xargs -0 /bin/ls -ltr 

Там есть верхний предел числа аргументов, но это не должно быть проблемой если они занимают более 32 КБ (далее here), и в этом случае вы получите блоки отсортированных файлов :)

+0

Спасибо, что работает, используя xargs – Steffi

+0

+1: Мне любопытно, как вы достигаете «более 32 тысяч из них». Я подозреваю, что предел меньше этого. IIRC, в Linux, общий размер аргументов командной строки environment + должен быть 128 KiB или меньше, и в этом случае ограничение на имена файлов длиной 8 символов составляет 16k или около того. Тем не менее, это придирка по деталям, а не серьезное возражение. –

+0

@JonathanLeffler Вы правы, это должно быть 32kB (зависит от системы, но кажется разумным минимумом), а не 32000 аргументов :) –

2
find . -name "filename" -exec ls --full-time \{\} \; | cut -d' ' -f7- | sort 

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

Смежные вопросы