Как сортировать subdir glob по имени файла, а не по полному относительному пути

( Я знаю, что этому вопросу уже более 2 лет, однако проблема до сих пор актуальна)

Я использую следующий код для своего диска, который не учитывает настройки smartctl:

#!/bin/bash
while :
do
        date +%s > /second_drive/keepalive_linux.txt
        sync
        sleep 2
done

Чтобы он запускался при запуске, я использовал:

EDITOR=nano crontab -e

И добавил:

@reboot bash /path/to/script.sh

(Кстати, диск отформатирован в NTFS)

Это то же самое, что и KeepAliveHD для Windows .

Хотя это можно было бы сделать лучше (, как описано в OP ), на данный момент это лучше, чем ничего.

2
20.11.2019, 15:34
3 ответа

Вы можете использовать sortвам нужно будет установить разделитель полей на /и отсортировать по 2-му полю.

1
27.01.2020, 22:16

В итоге я использовал findвместо globs. Спасибо @ctrl -alt -delor за подсказку о сортировке по полю.

for file in `find {subdirFoo,subdirBar} -maxdepth 1 -name 'prefix*.ext' | sort -t / -k 2`; do echo $file; somecommand $file; done
-1
27.01.2020, 22:16

Я не знаю, ли это правильный способ сделать это, но вы можете вставить подстановку параметра ${VAR##*/}в квалификаторzshoeglob:

 % printf '%s\n' subdir*/*(.Noe:'REPLY=${REPLY##*/}':)
subdirFoo/2019-05-02-blah.ext
subdirBar/2019-05-05-blah.ext
subdirBar/2019-05-13-blah.ext
subdirFoo/2019-06-01-blah.ext
subdirBar/2019-06-03-blah.ext
subdirFoo/2019-06-07-blah.ext

Это упорядочивает результат глобуса по последнему компоненту пути (именам файлов ). Бит :'...':в квалификаторе glob выполняется для каждого совпадения, а REPLYустанавливается в значение, которое будет использоваться в качестве ключа сортировки($REPLY— это фактическое совпадение с самого начала ).

См., например, Glob Qualifiers подраздел zsh :14.7 Расширение имени файла

oe and o+ are special cases; they are each followed by shell code, delimited as for the e glob qualifier and the + glob qualifier respectively (see above). The code is executed for each matched file with the parameter REPLY set to the name of the file on entry and globsort appended to zsh_eval_context. The code should modify the parameter REPLY in some fashion. On return, the value of the parameter is used instead of the file name as the string on which to sort. Unlike other sort operators, oe and o+ may be repeated, but note that the maximum number of sort operators of any kind that may appear in any glob expression is 12.

1
27.01.2020, 22:16

Теги

Похожие вопросы