Shellスクリプトを実行すると、「-exec」パラメータがありませんが、コマンドラインでは正常に実行されます。

Shellスクリプトを実行すると、「-exec」パラメータがありませんが、コマンドラインでは正常に実行されます。

ここにこのシェルスクリプトがあります。

###
# 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問題が解決します。

おすすめ記事