janemain420
janemain420

Reputation: 1

Shell: Check If File Exists When Changing Format

I'm trying to write a script that, when run, renames all .htm files in the directory to .html for a server. NO PROBLEM!

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

However, if there is a .html equivalent of a file already, it should print out "$file.html already converted - contacted administrator" and exit with status 1

I've tried using -mv and exists, but no cigar. Any help appreciated.

Upvotes: 0

Views: 78

Answers (1)

ingroxd
ingroxd

Reputation: 1025

You should first check for the file, then try to rename it by moving.

Something like this should suffice:

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

Note that also without any substitution you can just do mv "${file}" "${file}l".

Note that if do not use an amministrative user it is safer using an if-then-else as follows:

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

Upvotes: 1

Related Questions