bash скрипт с if [[! -f path_to_files]] - PullRequest
0 голосов
/ 13 марта 2020

В MacOS Catalina у меня есть скрипт bash с

if [[ ! -f $CR/home/files/Recovery_*.txt ]]
then
  echo "File does not exists in /home/files directory. Exiting" >> $log
  echo "Aborted - $CR/home/files/Recovery_*txt not exist"
  exit
fi

Несмотря на то, что в каталоге есть 2 файла, из которых выходит скрипт. Если я заранее перечислю содержимое каталога, то получу 2 файла. Если я изменяю его следующим образом, пропускается if:

if [[ `ls -la $CR/home/files/Recovery_*.txt | wc -l` -eq 0 ]]
then
  echo "No files are :"
  exit
fi

Я хочу использовать условное условие if -f.

Любые предложения, пожалуйста?

Приветствия, C

Ответы [ 2 ]

1 голос
/ 14 марта 2020

Если вы используете nullglob, выражение glob, которое не совпадает, возвращает пустую строку. Это позволяет нам считать файлы в bash, не вызывая другие процессы. Создайте массив с выражением, а затем проверьте его длину.

shopt -s nullglob
files=($CR/home/files/Recovery_*.txt)
if [[ ${#files[@]} -eq 0 ]]
then
    echo "No files"
    exit
fi
0 голосов
/ 13 марта 2020

[Отредактировано] Ошибка была не в переменных, а в пропущенном шебанге, поскольку скрипт натолкнулся на W2K3 SFU.

Подсказка о shellchecker. net была потрясающей, и я буду использовать ее сейчас .

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...