|
- оператор конвейера в Unix / Linux. Его можно использовать там, где выходные данные первой команды могут использоваться в качестве входных данных для второй команды.
Например:
ls -l | less
покажет длинный список ваших файлов в каталоге. Команда less
принимает выходные данные ls -l
в качестве входных данных и отображает список файлов, в которых вы прокручиваете вверх / вниз и видите их.
Вы можете сделать это с помощью zsh
:
zmodload zsh/stat
prefixmtime () {
sortstring=${(l:6::0:)${REPLY%%.*}}$(zstat -F '%s' +mtime -- $REPLY)
REPLY=${sortstring}
}
print -rl -- *(o+prefixmtime)
Замените print -rl
своей командой, если вы ' я доволен результатом
Как это работает:
Здесь глобусы будут отсортированы (с помощью o + function
) в зависимости от того, что возвращает функция prefixmtime
, то есть sortstring
, которая представляет собой строку, полученную путем объединения числового префикса каждого имени файла $ {REPLY %%. *}
left- , дополненного нулями (l: 6 :: 0:)
(при условии, что префиксы имеют длину до 6 символов) и mtime
в секундах (получено с помощью zstat
модуль). Может быть, будет легче понять, как это работает, если вы запустите:
{ for f (*)
printf '%s %s\n' ${(l:6::0:)${f%%.*}}$(zstat -F '%s' +mtime -- $f) $f
} | sort -k1,1n
Обратите внимание, что вышеупомянутое предполагает, что вы находитесь в том же каталоге, что и ваши файлы, в противном случае вам придется определить строку сортировки в этой функции как
sortstring=${(l:6::0:)${${REPLY##*/}%%.*}}$(zstat -F '%s' +mtime -- $REPLY)
и тогда вы можете использовать пути к каталогам, например
print -rl some/place/else/*(o+prefixmtime)
Решение состоит в том, чтобы сначала отсортировать по времени модификации, затем отсортировать только по первому числовому полю (при условии, что поля разделены '.'), отключив при этом сравнение в последнюю очередь (оно же стабильная сортировка).
ls -tr [0-9]* | sort -t. -k1,1n -s
[update]
Поскольку у вас в именах файлов есть пробелы, вы должны использовать xargs
для выполнения pdfunite
:
ls -tr [0-9]* | ( sort -t. -k1,1n -s; echo output.pdf ) | xargs pdfunite
find /home/masi/Documents -maxdepth 1 -type f -name '[0-9]*' -printf "%T+ %f\n" | sort -k2n -k1,1| cut -d ' ' -f 2- | xargs -i echo pdfunite /home/masi/Documents/{} output.pdf
Это не будет обрабатывать новые строки в именах файлов.
Вы можете переключить реверсирование порядка сортировки, изменив -k1,1
на -k1,1r
, что изменит сортировку по времени, а -k2nr
изменит обратное сортировка имени файла.