タイトルがひどすぎてすみません。タイトルは私が説明できる最高の言葉です。
したがって、一部のサーバーデータのバックアップtarを作成して/server/backupsに保存するバックアップスクリプトがありますが、先週のバックアップのみが必要なため、毎週のタスクとして実行し、バックアップフォルダをクリーンアップするためにこのスクリプトを作成しました。
#!/bin/bash
#initializing a with the amount of backup archives and b with the target max
a=find /server/backups/ -type f | wc -l
b=14
#if there are more backup files than target max
#delete the oldest files
if [ $a > $b ]
then
ls -1t /server/backups/ | tail -n +15 | xargs rm -f
fi
しかし、うまくいきません。私はLinuxに初めて触れ、「デバッグ」する方法を知りません。
答え1
a=find /server/backups/ -type f | wc -l
その後、コマンドが実行され、/server/backups/
環境a
変数がfind
。あるいは、実際には末尾のスラッシュのためにエラーが発生した可能性があります。あなたが望むものは一つです。コマンドの置き換え。
if [ $a > $b ]
>
ここはひも比較すると、例えば。2
より大きいでしょう14
。変数を引用する必要がありますが、数字のみを含む場合は問題にならない可能性があります。
ls -1t /server/backups/ | tail -n +15 | xargs rm -f
これには、スペース、引用符、または改行文字を含むファイル名には明らかな問題があります(xargs
入力がデフォルトで解釈される方法と行の処理tail
による)。ただし、これを無視できる場合は、ファイル名が「nice」の場合そしてGNU xargsがあれば実行できます
ls -t /server/backups/ | tail -n +15 | xargs -d '\n' -r rm
tail
15行未満の場合、出力は空であるためです。-d '\n'
デフォルトでは、引用符で囲むことができるスペースで区切られた単語の代わりに行全体を読み取るようにxargsに指示し、引数なしで-r
コマンドを実行しないように指示します。標準機能ではありません。