Я сделал следующую пару команд на Ubuntu 16.04.02, чтобы избавиться от Skype 4.3:
sudo apt-get --purge remove skype
sudo apt-get autoremove
Первый сам по себе оставил полностью функциональную установку Skype.
Изменить: ответы с использованием skypeforlinux для более новых версий Skype (например, Skype 5.3).
Это не имеет ничего общего с mv, но является функцией bash, ссылаясь на man bash:
Если опция оболочки extglob включена с использованием встроенного магазина, несколько расширенных распознаются операторы сопоставления шаблонов. В следующем описании список шаблонов представляет собой список из одного или нескольких шаблонов, разделенных символом |. Композитные шаблоны могут быть сформированы с использованием одного или нескольких следующих подматриц:! (Список шаблонов) Соответствует любому примеру, кроме одного из заданных шаблонов!(f1), в вашем примере соответствует f2 f3, поэтому эффективно вы делаете:
mv -t f3/ f2 f3 f2
Чтобы достичь своей цели, вы должны сделать следующее:
mv -t f3/ !(f[13]) # or !(f1|f3)
Это выражение соответствует всем, кроме f1 и f3. [!d10 ]
Это также работает с *, ? и […]:
$ ls
e1 e2 e3 f1 f2 f3
$ ls !(e*|?[12])
f3
Это не имеет ничего общего с mv, но является функцией bash, ссылаясь на man bash:
Если опция оболочки extglob включена с использованием встроенного магазина, несколько расширенных распознаются операторы сопоставления шаблонов. В следующем описании список шаблонов представляет собой список из одного или нескольких шаблонов, разделенных символом |. Композитные шаблоны могут быть сформированы с использованием одного или нескольких следующих подматриц:! (Список шаблонов) Соответствует любому примеру, кроме одного из заданных шаблонов!(f1), в вашем примере соответствует f2 f3, поэтому эффективно вы делаете:
mv -t f3/ f2 f3 f2
Чтобы достичь своей цели, вы должны сделать следующее:
mv -t f3/ !(f[13]) # or !(f1|f3)
Это выражение соответствует всем, кроме f1 и f3.
Это также работает с *, ? и […]:
$ ls
e1 e2 e3 f1 f2 f3
$ ls !(e*|?[12])
f3
Это не имеет ничего общего с mv, но является функцией bash, ссылаясь на man bash:
Если опция оболочки extglob включена с использованием встроенного магазина, несколько расширенных распознаются операторы сопоставления шаблонов. В следующем описании список шаблонов представляет собой список из одного или нескольких шаблонов, разделенных символом |. Композитные шаблоны могут быть сформированы с использованием одного или нескольких следующих подматриц:! (Список шаблонов) Соответствует любому примеру, кроме одного из заданных шаблонов!(f1), в вашем примере соответствует f2 f3, поэтому эффективно вы делаете:
mv -t f3/ f2 f3 f2
Чтобы достичь своей цели, вы должны сделать следующее:
mv -t f3/ !(f[13]) # or !(f1|f3)
Это выражение соответствует всем, кроме f1 и f3.
Это также работает с *, ? и […]:
$ ls
e1 e2 e3 f1 f2 f3
$ ls !(e*|?[12])
f3
!(f1) - расширенное выражение glob, поэтому (при условии установки опции оболочки extglob) он расширяется до списка файлов (не). Другими словами, если ваш каталог изначально содержал f1, f2, f3, то
mv -t f3/ !(f1) f2
расширяется как
mv -t f3/ f2 f3 f2
Первая ошибка должна быть очевидной; второй - потому, что он пытается дважды переместить f2 - и не работает второй раз.
!(f1) - расширенное выражение glob, поэтому (при условии установки опции оболочки extglob) он расширяется до списка файлов (не). Другими словами, если ваш каталог изначально содержал f1, f2, f3, то
mv -t f3/ !(f1) f2
расширяется как
mv -t f3/ f2 f3 f2
Первая ошибка должна быть очевидной; второй - потому, что он пытается дважды переместить f2 - и не работает второй раз.
!(f1) - расширенное выражение glob, поэтому (при условии установки опции оболочки extglob) он расширяется до списка файлов (не). Другими словами, если ваш каталог изначально содержал f1, f2, f3, то
mv -t f3/ !(f1) f2
расширяется как
mv -t f3/ f2 f3 f2
Первая ошибка должна быть очевидной; второй - потому, что он пытается дважды переместить f2 - и не работает второй раз.