Ваш метод можно адаптировать для работы в простых случаях. Основная проблема, с которой вы сталкиваетесь, заключается в том, что вы передаете ввод в ls
, но ls
не принимает никаких входных данных. ls
принимает аргументы командной строки. Таким образом, вам нужно передать вывод find
в качестве аргументов в ls
с подстановкой команд. Кроме того, в случае совпадения каталога, передайте от -d
до ls
, чтобы отобразить сам каталог, а не его содержимое.
OLDDATA=$(ls -td $(find. -regex ".*/[0-9.]+"))
Только в простых случаях, т.к. есть два ограничения:
$OLDDATA
после ). Поэтому предполагается, что имена файлов не содержат специальных символов (, пробелов или подстановочных знаков \[*?
). ls
могут искажать символы, которые не печатаются в текущей локали. find … -exec
и xargs
здесь не помогут, так как ls
нужно запустить один раз, чтобы получить правильный порядок имен файлов. Все, что они могли сделать, это скрыть ошибки и вывести некорректно отсортированный вывод, а в случае xargs
исказить еще несколько символов.)Надежный и простой способ сделать это — использовать zsh . Он имеет возможность сортировать совпадения с подстановочными знаками благодаря квалификаторам glob .
setopt extended_glob
OLDDATA=(**/[0-9.]##(om))
**/
рекурсивно обходит подкаталоги, избегая использования find
. ##
означает «один или несколько из предыдущих» в синтаксисе расширенного glob zsh, он аналогичен +
в синтаксисе (расширенного )регулярного выражения.(om)
— это квалификатор glob для сортировки файлов по времени модификации, например ls -t
. Общеизвестно, что не существует простого способа сделать это надежно с помощью инструментов POSIX или даже с помощью инструментов GNU и ksh.
По этой ссылке содержится приличное изложение настроек темы KDE, включая настройку цвета текста. В результате вы можете найти то, что ищете, в Системных настройках -> Внешний вид.