Я видел много вопросов и ответов здесь, используя конструкцию в соответствии с
list_dir=`ls -t /path/to/dir/`
for i in $list_dir; do
или
ls -t | while read i; do
Теперь я знаю, что вы не должны использовать ls в скриптах, потому что они легко ломаются; но я не могу найти лучший способ работы с файлами в порядке от последнего изменения до последнего изменения (или наоборот).
Я могу использовать что-то вроде:
find . -type f -printf '%T@ %p\n' | sort -n | cut -d ' ' -f 2- | while read i; do...
... но это все равно не работает с любыми файлами, в именах которых есть переводы строк, и загружать их гораздо труднее. Есть ли способ лучше?
--zero-terminated
спасибо за это, я бы хотел дать вам еще больше очков!info ls
: если мне нужен пуленепробиваемый скрипт с ls, что--quoting-style
мне использовать?--quoting-style=escape
это выбор.ls
--quoting-style
сбой GNU (для синтаксического анализа), потому что он цитирует только имена файлов: когда у вас есть пробел в имени группы. Хорошо, это очень странный случай, но он добавлен в оболочку Cygwin Bash, здесь у вас есть такие имена групп, какDomain Users
.Самый простой способ - использовать zsh. Глоб классификатор
om
сортирует матчи в обратном хронологическом порядке; использоватьOm
в хронологическом порядке.Спецификатор
N
glob заставляет шаблон расширяться до пустого списка, если каталог пуст. Сделайте это,*(DNom)
чтобы соответствовать точечные файлы.источник