Можно ли отобразить все файлы в текущем каталоге с именем файла, которое не начинается с четной цифры, за которой следует алфавитная буква?
Я пытаюсь ответить на эту проблему для класса COSC, который фокусируется на Linux/Unix.
Я использую Linux с оболочкой bash. Я новичок в Linux по состоянию на сентябрь.
У моего преподавателя есть этот вопрос в заданиях на этой неделе, и, основываясь на обсуждениях в классе, он идет от включения до не. Мне бы очень хотелось прибить это после всего того времени, что я на это потратил.
Команда, которую я придумала, не учитывает, если имя файла начинается с четной цифры, за которой следует другая цифра с использованием подстановочных знаков. Это спорный момент, когда вопрос включен или исключен из задания, и я часами сидел, пытаясь решить эту проблему.
Это вообще возможно?
Я придумал:
echo [!02468][a-zA-Z]*
Любые предложения приветствуются и высоко ценятся.
4 ответа
Вы также можете сделать следующее
shopt -s extglob
echo !([02468][a-zA-Z]*)
shopt -u extglob
Вам необходимо включить extglob
с shopt -s extglob
первый.
После этого вы можете снова отключить его с помощью shopt -u extglob
,
Опция оболочки extglob дает вам более мощное сопоставление с образцом в командной строке.
@ Решение Рика с использованием extglob
это, наверное, лучший способ для bash
, Если вам нужен независимый от оболочки способ (если вы используете GNU find), попробуйте это:
find . -type f -not -name "[02468][a-zA-Z]*"
Я не думаю, что это возможно с простой командой. Следующее должно сделать трюк, хотя:
for i in *; do
case "$i" in
[02468][a-zA-Z]*) ;; # do nothing
*) echo "$i" ;;
esac
done