変数で rm コマンドを使用する際のリスク

変数で rm コマンドを使用する際のリスク

セキュリティカメラの15分のクリップを1つのファイル(24時間長)に圧縮し、そのクリップを削除するcrontabを作成しています。

avimerge -o /media/jmartin/Cams/video/Full_$(date +%F --date "Yesterday") -i /media/jmartin/Cams/video/$(date +%F --date "Yesterday")* # Converts files from the past 24 hours into one .avi

rm /media/jmartin/Cams/video/$(date +%F --date "Yesterday")* # Removes old clips that have already been compressed

私の質問は、$date変数を使用する際の危険性が何であるかです。 /video/のすべてのファイルを削除できますか?より安全な選択肢として何をお勧めしますか?

ファイル名の例(例:ファイル名にスペースが含まれています):

2016-04-25 00:00:01.avi  
2016-04-25 00:15:02.avi 
2016-04-25 00:30:02.avi  
2016-04-25 00:45:01.avi  

ベストアンサー1

技術的に$(date +%F --date "Yesterday")は変数ではなくコマンドの置き換えですが、あなたの質問には関係ありません。何らかの理由dateでコマンドが存在しないため、何も返さない場合は、この設定に問題がある可能性があります$PATH。この場合、すべての内容が削除されます/video/。コマンドの置換を実行してコマンドの前の変数に割り当ててから、コマンドでそのavimerge変数を使用すると、作業中の日付文字列が変更されていないことを確認したり、長さがゼロであることをテストしたりできます。 2つのコマンド変数の前に(長さ0の文字列がある場合)、不要な操作を実行する前に終了します。avimergerm

おすすめ記事