私が所有しているもの
現在、90日を過ぎたディレクトリとファイルを見つけて削除するようにcronが設定されています。
私は必要です
90日を過ぎたディレクトリとファイルを削除したときに、crontabに両方のディレクトリを無視するようにしたいと思います。
今まで何をしたのか
このcrontabはディレクトリとファイルを削除し、dir1を無視しますが、2番目の-not -pathで指定したにもかかわらず、dir2からディレクトリとファイルを削除し続けます。
00 4 * * * sudo find /home/*/* -type d -not -path "/home/dir1/*" -not -path "/home/dir2/*" -mtime +90 -exec rm -r "{}" \;
02 4 * * * sudo find /home/*/* -type f -not -path "/home/dir1/*" -not -path "/home/dir2/*" -mtime +90 -exec rm "{}" \;
実際の問題
ディレクトリ/ファイルを見つけて削除するときに2つのディレクトリをどのように無視できますか?上記の例では動作させることができないので、-not -pathを2回指定できますか?
答え1
まず、crontab
コマンドフィールドではありませんbash
。bash
コマンドフィールドを乱用するのではなく、他の場所に保存されているスクリプトを呼び出す必要があります。
man find xargs
読んで
#!/bin/bash
find /home/*/* -type d \( -name dir1 -o -name dir2 \) -prune -type f -mtime +60 -print0 | \
xargs -0 -r rm