rm -rf не работает с цифрами, используя linux?

Это мой текущий каталог, который содержит следующие папки:

rpea-vd1-430: ls rev10 rev11 rev12 rev2 rev3 rev4 rev5 rev6 rev7 rev8 rev9 Synthesis.config Synthesis.html 

Я использовал следующую команду linux для удаления папок.

  rm -rf rev[1-11] 

но моя команда терпит неудачу, если я дам

 rm -rf rev[1-9] 

поскольку он удаляет каталоги, имена которых называются от rev1 до rev9; почему он не рассматривает двойные цифры?

Ожидаемый результат:

 rev11 Synthesis.config Synthesis.html 

3 Solutions collect form web for “rm -rf не работает с цифрами, используя linux?”

почему rm -rf rev[1-9] не рассматривает двойные цифры?

Почему это должно быть? Вы указали только одну цифру. Выражение скобки [..] соответствует точно одному символу, который должен быть одним из тех, которые указаны в скобках. Поэтому rev[1-9] соответствует именам файлов формата revN , где N – некоторая цифра (кроме 0 ). Аналогично, rev[1-11] соответствует точно rev1 , так как 1 является единственным символом, указанным в скобках, хотя он указан несколько раз. Это то же самое, что rev[1] или rev1 . Точно так же rev[1-12] будет таким же, как rev[12] .

Вы можете использовать rev[0-9]* для соответствия всем именам файлов, начинающимся с rev , цифрой, а затем что угодно, или с использованием расширенных глобусов в Bash и ksh, rev+([0-9]) . Подвыражение +(...) соответствует хотя бы одному повторению шаблона в скобках, аналогично (...)+ в регулярных выражениях.

С другой стороны, расширение {a..b} будет генерировать строки, а не имена файлов, поэтому вы можете использовать rev{1..12} для генерации rev1 , rev2 , … rev12 . Это не учитывает, существуют ли файлы, поэтому он также генерирует rev1 , который не существует в вашем примере.


Судя по редактированию, вы хотите сопоставить (и rm ) все файлы, соответствующие rev* , кроме rev11 ? Самый простой способ – это, вероятно, временно переименовать исключение (предполагая, что arev11 не существует):

 $ mv rev11 arev11 $ rm -r rev* $ mv arev11 rev11 

Вы можете использовать расширение скобки …

 $ rm -r rev{{1..10},12} 

(Это приведет к ошибкам в отношении несуществующих имен, если вы установите слишком высокий верхний предел).

Создание glob, который соответствует номерам, отличным от 11, немного сложнее, возможно, что-то вроде этого, но лучше сначала проверить:

 $ echo rm -r rev[0-9] rev1[02-9] rev[2-9][0-9] 

Расширение скобки не является числовым.

  • rev[1-9] будет расширяться [1-9] со всеми символами между 1 и 9
  • rev[2468] будет расширяться до rev2 rev4 rev6 rev8
  • rev[AZ] будет расширяться до revA revB ... revZ (файл существует)
  • rev[1-11] также будет расширяться до всех символов между 1 и 1
  • rev[1-15] будет расширяться до всех символов между 1 и 1 и char 5, что эквивалентно rev[15] , совпадающим с rev1 и rev5

Вы должны использовать фигурные скобки и .. :

 rm -rf rev{1..11} 

См. Разницу между echo rev[1-11] и echo rev{1..11} .

  • Разница между командой `ls 2> tmp> tmp` и командой` ls> tmp`
  • В чем разница между точкой с запятой и двойным амперсандом &&
  • bash: Синтаксис около неожиданной ошибки '('
  • Есть ли противоположность «тройника», чтобы объединить несколько труб?
  • сценарии оболочки, которые отвечают на вывод консоли
  • Почему «rm -rf ./» ничего не удаляет?
  • Сложное содержимое переменной не попало в sed
  • Могу ли я иметь оболочку (bash) с ожиданием работы в фоновом режиме?
  • Пространства имен Shell
  • Могу ли я имитировать утилиту tee, используя дополнительные файловые дескрипторы?
  • Удалите файлы в каталоге, которые соответствуют регулярному выражению, используя терминал Mac
  • Linux и Unix - лучшая ОС в мире.