スクリプトを作成しようとしましたが、追加する最後の部分でブロックされました。
このスクリプトは、私のサーバーへのいくつかのパスを私のGoogleドライブと同期します。私のサーバーに削除または変更されたファイルがある場合は、/old/date/
gdriveのパスに移動します。
oldlog="/boot/logs/old-log.txt"
del=""
date=$(date +"%Y-%m-%d-%H%M")
--backup-dir "${dest}/old/${date}"
これは完全に機能しますが、ファイルを手動で削除する必要があるため、/old/
これを変更したいと思います。
だから私に必要なのは、常にログに行1を$date
書き、ログ内の他のすべての行を1行下に移動することです。$oldlog
書き込み$date
ログは書き込みログと一致する必要があるため、$date
同じ--backup-dir "${dest}/old/${date}"
です。
したがって、ログはxx日の1日後に次のように機能する必要があります。
2019-07-01-1800
2日
2019-07-02-1800
2019-07-01-1800
3日
2019-07-03-1800
2019-07-02-1800
2019-07-01-1800
だから次の部分のために。上記の例のようにログを更新した後、21行目を取得し、そのoldlog.txt
行を削除してスクリプトに$del
。
oldlog="/boot/logs/old-log.txt"
del=
rclone purge "${dest}/old/${del}"
行が空の場合は、内部のすべての内容が消去されないようにランダムなテキストにする必要があります/old/
。それとも、より高度なアプローチを使用できますか? if del = emptyのようなものは消去がないことを示すメッセージを表示します。 oldlog.txt で del=value の場合、以下を実行します。rclone purge "${dest}/old/${del}"
oldlog="/boot/logs/old-log.txt"
del=
delempty=echo "nothing to purge today"
delvalue=rclone purge "${dest}/old/${del}"
複雑にならずにスクリプトでこれを実行できますか?
答え1
4つのことをやろうとしています。 1) ファイルの先頭に行を挿入します。
ストリームエディタユーティリティを使用して、sed
これをすべて実行できます。私の答えはGNUを仮定しますsed
。しかし、正確な構文は異なるバージョンのsed
。
ファイルの先頭に行を挿入するには:
sed -i "1i\${date}" ${oldlog}
この-i
オプションは、sed
ファイルがその場所で処理されるように指示します。最初の行でのみ機能するように指示1
します。その行の前に挿入するように指示します。sed
i\
sed
行21を検索するには、次のようにします。
del="$(sed -n 21p "${oldlog}")"
-n
自動モードでのみ設定されるため、sed
明示的に印刷される内容のみが出力されます。21
は行番号で、p
印刷コマンドです。
21行目があることを確認してください。
sed -n 21q1 ${oldlog}
sedを-n
自動モードに戻し、21
行21を選択してsedにq
終了するように指示します。これが1
終了コードです。
21行目を削除する:
sed -i 21d ${oldlog}
もう一度-i
ファイルを操作するには、21
21行目を選択してd
削除します。
一緒に入れてください:
sed -i "1i\${date}" ${oldlog}
del="$(sed -n 21p "${oldlog}")"
sed -n 21q1 ${oldlog} || { echo "Deleting ${dest}/old/${del}" && rclone purge "${dest}/old/${del}" && sed -i 21d ${oldlog} }