Оболочка: проверьте, существует ли файл при изменении формата - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь написать скрипт, который при запуске переименовывает все файлы .htm в каталоге в .html для сервера. НЕТ ПРОБЛЕМЫ!

for file in *.htm ; do mv $file `echo $file | sed 's/\(.*\.\)htm/\1html/'` ; done

Однако, если файл уже существует в формате .html, он должен распечатать «$ file.html уже преобразован - связался с администратором» и выйти со статусом 1

Я пытался использовать -mv и существует, но без сигары. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 29 августа 2018

Сначала необходимо проверить файл, а затем попытаться переименовать его, переместив.

Что-то вроде этого должно быть достаточно:

for file in *.htm; do
  [ -f "${file%.*}.html" ] && mv "${file}" "${file%.*}.html" || printf "%s.html already converted - contacted administrator" "${file%.*}"
done

Обратите внимание, что также без какой-либо замены вы можете просто сделать mv "${file}" "${file}l".

Обратите внимание, что если не использовать пользователя с правами администратора, безопаснее использовать if-then-else следующим образом:

for file in *.htm; do
  if [ -f "${file%.*}.html" ]; then
    mv "${file}" "${file%.*}.html"
  else
    printf "%s.html already converted - contacted administrator" "${file%.*}"
  fi
done
...