Скажем, например, у меня есть следующие файлы в моем рабочем каталоге: mjk0001.fits, mjk0002.fits, ... численно увеличиваясь вплоть до mjk9999.fits.
Есть ли способ использовать подстановочные знаки UNIX для перечисления или работы с последовательной группой из них? Например, если мне нужно запустить процесс с 0025 по 0050, какой формат я бы использовал?
Я пробовал следующее, но безуспешно:
ls *[25-50].fits
ls mjk00[25-50].fits
ls mjk[0025-0050]*
ls *[0025-0050]*
Заранее всем спасибо, МК
bash
unix
command-line
ls
Мэтт Кин
источник
источник
Ответы:
Вы можете использовать расширение скобки:
Ведущие нули могут быть включены при необходимости:
источник
{25..50..2}
.Не напрямую, но вы можете использовать несколько шаблонов глобуса:
Это не совсем то, что вы ищете, но это самая близкая вещь, которую предлагают шаблоны glob, и это, безусловно, лучше, чем печатать каждую файловую систему. По крайней мере, количество шаблонов, которое вам понадобится на числовой диапазон, ограничено журналом числовых конечных точек диапазона.
источник
Вы можете использовать регулярные выражения с grep. Я не гуру регулярных выражений. Далее возвращается шаблон с номерами между 25-50:
Я не знаю, возможно ли это и как в конечном итоге обобщить это с помощью grep.
источник
Может быть возможно достичь большей мобильности или гибкости, используя
for
цикл иprintf
:Это хорошо обрабатывает пространства, и результаты хорошо подходят для трубопровода
xargs
для дальнейшей обработки.Числа с несколькими совпадениями приведут к тому, что все соответствующие файлы будут перечислены.
Числа без совпадений сообщат об ошибке на stderr, но
||true
подавляют возврат ошибки уровня bash.В базовом случае, тем не менее, использование
for
иprintf
ничем не отличается от более краткого:источник
for i in {025..050} ; do ... ; done