Удалить все файлы, кроме двух

Я нашел ответ.

Я обновил ~ / .config / monitors.xml и нашел VGA1 , который является моим телевизором, и установил правильные ширину и высоту (1408x792), и после перезапуска конфигурация была успешно применена.

3
24.07.2016, 23:36
2 ответа

Вам нужно

shopt -s extglob

внутри скрипта.

Ваша конфигурация bash предположительно включает это автоматически для интерактивных оболочек (возможно, потому, что вы загружаете пакет bash-Completion для контекстно-зависимого завершения); вам нужно включить его вручную внутри скриптов.

Также убедитесь, что ваш скрипт начинается с #! / Bin / bash (или варианта вроде #! / Usr / bin / env bash , в противном случае он может быть выполнен другая оболочка, не поддерживающая этот синтаксис.

Например, этот сценарий создаст несколько файлов, а затем удалит все, кроме двух, которые вы хотите сохранить:

$ cat x
#!/bin/bash

shopt -s extglob

touch f1 f2 f3 exec.js .git foo bar

echo Before: $(ls -A)

rm !(exec.js|.git)

echo After: $(ls -A)

В процессе выполнения:

$ bash x
Before: .git bar exec.js f1 f2 f3 foo x
rm: cannot remove '.': Is a directory
rm: cannot remove '..': Is a directory
After: .git exec.js

Обратите внимание, что вы получаете ошибки с . и .. ; вы также увидите их в командной строке:

$ touch f1 f2 f3 exec.js .git foo bar

$ rm !(exec.js|.git)
rm: cannot remove '.': Is a directory
rm: cannot remove '..': Is a directory
3
27.01.2020, 21:18

Как совет, вы можете добавить

GLOBIGNORE=.:..

после shopt -s extglob, чтобы избежать ошибки rm: cannot remove '.': Is a directory.

1
27.01.2020, 21:18

Теги

Похожие вопросы