
#!/bin/sh
if [ -e $1 ] ; then
mv $1 $1_$(date +%Y%m%d%H%M)
fi
exit 0
要件は、ファイルを検索し、ファイルが存在する場合はファイルの名前を変更してプログラムを終了することです。ファイルが存在する場合にのみ名前を変更する必要があります。
上記のエラーが発生しています
答え1
一般的に言えば、bash 変数は常に二重引用符で囲む必要があります。
たとえば、$1 が であるとしますMy File.txt
。スクリプトはこれを実行しようとします:
mv My File.txt My File.txt_201501010101
これは、ファイル、、 をまとめて宛先 にmv
移動することを意味します。My
File.txt
My
File.txt_201501010101
代わりに必要なのは次のようになります:
mv "My File.txt" "My File.txt_201501010101"
詳細と回避すべきその他の落とし穴については、以下を参照してください。 http://mywiki.wooledge.org/BashPitfalls#cp_.24file_.24target
exit 0
スクリプトの最後のPSは冗長です。スクリプトがエラーなしで終了した場合、終了ステータスは暗黙的に 0 になります。