自動的に作成されたファイルを含むバックアップフォルダが私のサーバーにあります。彼らは私のディスク容量を100%占めています。したがって、すべてのファイルを削除して最新の2つのファイルを保持するには、cronを作成する必要があります。
私はこれを行うコードを見つけましたが、実行方法がわかりません。
(temp_all=$(mktemp) && temp_last=$(mktemp) && { tac | tee $temp_all | sort -un > $temp_last ; } && grep -vf $temp_last $temp_all ; rm -f $temp_last $temp_all)
どうすればいいですか? .shファイルを生成し、パラメータを使用して実行しますか?どうすればいいですか?
このコードは私の要件を満たしていますか?
よろしくお願いします!
ベストアンサー1
使用find
とperl
(注意して使用してください、unlink
ファイル削除):
(さまざまな種類のファイルを処理できます:改行、スペースを含む...)
$ ls -ltr
total 0
-rw-rw-r-- 1 stardust stardust 0 févr. 14 00:21 foo
-rw-rw-r-- 1 stardust stardust 0 févr. 14 00:21 bar
-rw-rw-r-- 1 stardust stardust 0 févr. 14 00:21 base
-rw-rw-r-- 1 stardust stardust 0 févr. 14 00:21 qux
$ find /path/to/dir -type f -printf '%T@ %p\0' |
sort -z -nk1 |
perl -0 -ne '
m|\s+(\./.*)|ms and push(@files, $1);
END{unlink for @files[0..($#files - 2)]}'
$ ls -ltr
total 0
-rw-rw-r-- 1 stardust stardust 0 févr. 14 00:21 base
-rw-rw-r-- 1 stardust stardust 0 févr. 14 00:21 qux
crontabで使用:
スクリプトを作成します(コピーしてシェルに貼り付けるだけです)。
install -D -m755 /dev/null ~/bin/remove_files_except_2_last_ones
cat<<EOF > ~/bin/remove_files_except_2_last_ones
#!/bin/sh
. ~/.bashrc # or any other *rc file, to set PATH variable
find /path/to/dir -type f -printf '%T@ %p\0' |
sort -z -nk1 |
perl -0 -ne '
m|\s+(\./.*)|ms and push(@files, $1);
END{unlink for @files[0..($#files - 2)]}'
EOF
crontab -e
次に貼り付けます。
* * * * * ~/bin/remove_files_except_2_last_ones &>/tmp/2_last_ones.log
(* * * * *
独自のタイミング仕様に応じて変更してください)。