Удалите все файлы, кроме некоторых с постоянным именем, а некоторые из них содержат специальные в Unix - PullRequest
0 голосов
/ 16 января 2019

Я хочу удалить все файлы в каталоге, кроме некоторых в UNIX. В первой части желаемые файлы имеют известное имя, а в другой - я использую команду ls | grep. Но лс | grep работает, когда есть только один случай, а не когда их больше одного. то же самое с find | grep. вот мои команды:

rm -v !("R1.r"|"R2.r"|"r2.par"|$(ls|grep nario)|"sh.sh")

rm -v !("R1.r"|"R2.r"|"r2.par"|$(find|grep nario)|"sh.sh")

Есть ли проблемы с моими командами ???

1 Ответ

0 голосов
/ 16 января 2019

Похоже, вы пытаетесь использовать BASH-специфический синтаксис extglob. ls|grep не будет работать в середине шара, потому что каждый шаблон должен быть отделен |, что не случится с ls|grep. Самый простой способ сделать то, что вы хотите, это использовать глобализацию оболочки, чтобы найти файлы в каталоге, который вы ищете. Убедитесь, что вы делаете следующее:

  1. Используете BASH
  2. Включено extglob: shopt -s extglob
  3. Включено globstar: shopt -s globstar
  4. Использовать глобализацию файла вместо ls | grep

Затем попробуйте еще раз:

rm -v !("R1.r"|"R2.r"|"r2.par"|**/*nario*|"sh.sh")

Примечание: globstar требует BASH версии 4 или выше.

...