ここにこのシェルスクリプトがあります。
###
# Create a folder dynamically
mkdir archived_PA_"$(date -d "6 months ago - 1 day" +%Y-%m-%d)"_"$(date -d "1 day ago" +%Y-%m-%d)"
# Move files to new folder dynamically
find ./VA -newermt $(date +%Y%m%d -d '6 months ago') ! -newermt $(date +%Y%m%d -d 'today') -exec mv -t /var/log/pentaho/archived_PA_"$(date -d "6 months ago - 1 day" +%Y-%m-%d)"_"$(date -d "1 day ago" +%Y-%m-%d)" {} +
# Archive dynamic folder
zip -r archived_PA_"$(date -d "6 months ago - 1 day" +%Y-%m-%d)"_"$(date -d "1 day ago" +%Y-%m-%d)".zip /var/log/pentaho/archived_PA_"$(date -d "6 months ago - 1 day" +%Y-%m-%d)"_"$(date -d "1 day ago" +%Y-%m-%d)"
最初はコマンドラインからすべての行が正しく実行されますが、このコマンドを使用してこのシェルスクリプトを実行すると、./script_name.sh
次のエラーが発生します。
./HIX-170061.sh: line 4: $'\r': command not found
find: missing argument to `-exec'
./HIX-170061.sh: line 7: $'\r': command not found
adding: var/log/pentaho/archived_PA_2023-01-09_2023-07-09^M/ (stored 0%)
つまり、別の行を実行できますが(4行目と7行目は除外しますが空白行なので重要ではないと思います)、6行目でエラーが発生しますfind: missing argument to `-exec'
。
答え1
これらの$'\r'
メッセージは、スクリプトにキャリッジリターン(CR)文字と改行文字のWindows行末が含まれており、bashはCR文字を空白ではなく文字として扱うことを意味します。
このエラーは、最後find
に渡された引数がコマンドを終了する予想されるプラス記号自体ではなく、プラス記号の後にキャリッジリターンになるために発生します-exec
。
スクリプトを実行するとdos2unix
問題が解決します。
答え2
Notepad ++を使用してこの問題を解決しました。編集 - > EOL変換 - > Unixに移動してスクリプトを実行できます。