Можно ли отобразить все файлы в текущем каталоге с именем файла, которое не начинается с четной цифры, за которой следует алфавитная буква?

Я пытаюсь ответить на эту проблему для класса 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

Следующее должно сделать трюк

echo !([02468][a-zA-Z])
Другие вопросы по тегам