Как бороться с отсутствующей ошибкой операнда при попытке rm

У меня есть следующий код

rm "$torrent"/*.{txt,nfo,jpg} && echo "removed \"txt,nfo,jpg\" files"

Если нет файлов для удаления, я получаю ошибку "отсутствует операнд", которую я хотел бы избежать, потому что она вызывает выход 1 для сценария.

Если у меня есть следующий код

rm -f "$torrent"/*.{txt,nfo,jpg} && echo "removed \"txt,nfo,jpg\" files"

rm всегда оценивается как истина, даже если не было удаленных файлов.

Я хочу отобразить сообщение "удалены.. файлы", если некоторые файлы были удалены. Если файлы не были удалены, я хочу тишины без ошибок.

Я играл с

find "$torrent" -type f -name "*.txt" -or -name "*.nfo" -or -name ".jpg" -delete && echo "files were deleted"

но оно всегда оценивается как true, даже если файлы не были удалены.

1 ответ

Решение

Просто переписать его в правильное if заявление:

if rm "$torrent"/*.{txt,nfo,jpg}
then
  echo "removed \"txt,nfo,jpg\" files"
if

Это позволяет вам реагировать на состояние выхода, пока set -e действует без выхода из сценария

Другие вопросы по тегам