Как проверить, существует ли в Bash один или несколько файлов (каталогов /ies )?

Журнал/сообщения сообщают вам, в чем проблема:

dpkg: dependency problems prevent configuration of wingide6:
 wingide6 depends on libpango1.0-0 (>= 1.18.0); however:
  Package libpango1.0-0 is not installed.

В частности, dpkg, не удается установить это wingide6, поскольку некоторые необходимые пакеты еще не установлены.

Таким образом, простое решение состоит в том, чтобы установить любой пакет, который требуется этому конкретному пакету:

$ sudo apt-get install libpango

После того, как вы установите это и все дополнительные необходимые компоненты, вы сможете запустить dpkg -i wingide6.0.12-1.amd64.deb.

-1
01.09.2020, 09:08
2 ответа

Используйте оператор проверки -dна bashдля проверки существования каталога:

if [[ -d testdir ]]; then echo "testdir already exists"; else mkdir testdir; fi

Вы можете заменить 'testdir' переменной. Двойная кавычка переменной для безопасности:

if [[ -d "$backup_dir"]]; then echo "$backup_dir already exists"; else mkdir "$backup_dir"; fi

Если это вложенный каталог (, например, dir1/dir2/dir3 ), используйте вместо него mkdir -p.

Дополнительные сведения об операторах проверки файлов см. в bash:https://tldp.org/LDP/abs/html/fto.html

.
0
18.03.2021, 23:08

Синтаксис для проверки существования файла в оболочках POSIX::

if [ -e "$file" ] || [ -L "$file" ]; then
  printf '%s\n' "The $file file exists"
  if [ -d "$file" ]; then
    if [ -L "$file" ]; then
      echo "and it's a symlink to a directory"
    else
      echo "and it's a directory"
    fi
  else
    echo "and it's not a directory (or I couldn't tell if it was)"
  fi
else
  printf '%s\n' "$file does not appear to exist"
fi

Таким образом, вы можете вставить код, который хотите запустить в случае, если это важно для вас.

Теперь обратите внимание, что из-за -f,

rm -rf -- "$file" || exit

Будет успешным в случае, если $fileне существовало заранее. Единственный случай, когда rmвозвращает статус выхода с ошибкой, это когда файл все еще существует после (он был там, но не мог быть удален ).

Таким образом, вам, вероятно, не нужно проверять заранее, если вы не хотите охватить случай, когда $fileсуществовал, но не имел типа каталог .

И:

mkdir -p -- "$file" || exit

Будет выполнено успешно, пока $fileсуществует и впоследствии может быть определено как каталог, даже если он уже существует.

Опять же, вам, вероятно, не нужно делать тест заранее.

0
18.03.2021, 23:08

Теги

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