Bash еще не позволяет легко сортировать файлы по времени модификации , поэтому вот обязательный ответ, основанный на zsh -. Вам не нужно переключаться на zsh в качестве оболочки для входа в систему, чтобы использовать ее функции.
Здесь я настроил функцию-оболочку, которая принимает один или два аргумента; первый аргумент - это программа для выполнения (, например.myprogram
); второй необязательный аргумент — это каталог, содержащий файлы, которые вы хотите передать программе. Если вы не укажете второй аргумент, по умолчанию используется текущий каталог.
zeio() {
# Zsh-based Execute with files In Order
[ -d "${2:-.}" ] || return
zsh -c "$1 \"${2:-.}\"/*(.om)"
}
Назовите это как хотите, конечно. После быстрой проверки -второго аргумента (еще раз, по умолчанию .
, текущий каталог ),мы вызываем zsh с одной строкой в двойных -кавычках, которая содержит программу и некоторые начальные аргументы (аргумент #1 )и каталог (аргумент #2 )— по умолчанию .
— с расширением подстановочного знака/шаблона, которое имеет два «квалификатора подстановки» в конце круглых скобок:
.
--должны быть обычные файлы (не каталоги или символические ссылки и т. д.)om
--o
rder (сортировать )результирующий список по времени модификации, сначала самые последние Именно этот квалификатор om
glob делает здесь всю реальную работу.
Вот несколько примеров прогонов; myprog
— это простой сценарий оболочки для демонстрации аргументов, которые он получает, чтобы:
#!/bin/sh
for arg do
printf 'Arg: ->%s<-\n' "$arg"
done
и go.sh
— это файл, в котором я сохранил функцию. Остальная часть структуры каталогов:
$ tree.
.
├── dir1
│ ├── 203142
│ ├── 203143
│ └── 203144
├── dir3
│ ├── first\012filename
│ ├── this is 3rd
│ └── this is second
├── dir two
│ ├── 203225
│ ├── 203226
│ └── 203227
├── go.sh
└── myprog
... где я создал наборы из трех файлов в каждом подкаталоге в указанной последовательности; Я ожидаю увидеть их в том же порядке при выполнении функции. Имя первого файла в каталоге dir3 содержит новую строку, представленную tree
с \012
. Результаты:
$ zeio./myprog
Arg: ->./myprog<-
Arg: ->./go.sh<-
$ zeio./myprog dir1
Arg: ->dir1/203142<-
Arg: ->dir1/203143<-
Arg: ->dir1/203144<-
$ zeio./myprog "dir two"
Arg: ->dir two/203225<-
Arg: ->dir two/203226<-
Arg: ->dir two/203227<-
$ zeio./myprog dir3
Arg: ->dir3/first
filename<-
Arg: ->dir3/this is second<-
Arg: ->dir3/this is 3rd<-
Не решение, но я нашел объяснение проблемы и обходной путь здесь:Проблема возникает только после загрузки в Linux после повторного -запуска в Windows 10. Похоже, что Windows перевести динамики в спящий режим, из которого Linux не может их правильно разбудить. Обходной путь — полностью закрыть Windows и загрузиться в Linux.