問題があります。 7日より古いファイルとディレクトリのリストを作成し、tokeep.listリストにないファイルとディレクトリを削除するスクリプトを作成しようとしています。私の最初の問題は、nodeleteリストにディレクトリを入れましたが、そのディレクトリ内に古いファイルがある場合、そのファイルは削除されないことです。これまで私ができた唯一の解決策は、コマンドディレクトリと他のファイルを実行することです。 、それは非常に醜く、私は開発者ではありません。
LogFile=/users/nordic/housekeep.log
source config.cfg
exec &> >(tee $LogFile)
echo "Starting Housekeep files at $host $timestamp"
echo "Creating list of directories to delete"
cd $dir
find $dir/* -maxdepth 1 -type d -mtime +$days > /users/nordic/todelete
if [ $? -eq 0 ]; then
echo OK
else
echo FAIL
fi
echo "deleting directories to listed on todelete file"
dels=`cat /users/nordic/todelete`
readarray -t keeps < /users/nordic/tokeep
for keep in "${keeps[@]}"; do
dels=`echo "$dels" | grep -v "$keep"`
done
echo "$dels" > /users/nordic/todelete
readarray -t dels < /users/nordic/todelete; for del in "${dels[@]}"; do rm -rv "$del"; done
result=$?
if [ $result -eq 0 ]; then
echo SUCCESS |tee /users/nordic/res
else
echo FAILED |tee /users/nordic/res
fi
find $dir/* -maxdepth 1 -type f -mtime +$days -print -delete
#SUBJECT="Automated Housekeep $host $resu"
#TO="[email protected]"
#MESSAGE="$LogFile"
#mailx -s "$SUBJECT" -r "info<[email protected]>" $TO < $MESSAGE
変数を含むconfig.cfgファイルがあります。保持したいファイルとディレクトリ名のリストを作成し、残りの部分を削除しようとしています。どんな提案でも歓迎します。
ベストアンサー1
cd "$dir" && \
find . -type d ! -name . -mtime +"$days" \
! -exec sh -c 'printf %s\\n "${1/./$PWD}" | grep -qFf /users/nordic/tokeep' {} {} \; \
-print0 -prune -o -type f -mtime +"$days" -delete |\
xargs -r0 rm -r
布材
cd
ディレクトリを正常に入力した後。誰の名前が$dir
私たちの中に保存されているのかfind
次の点を考慮してコマンドを開始してください。directory
:- これは現在のディレクトリではなく、$daysより古いです。 tokeepファイルにない場合、その名前はパイプのもう一方の端にあるxargsに送信されます。ライセンスがあるとマークされているため、そのディレクトリに移動しないでください。
- OTW、
file
$daysより古い場合は削除してください。
xargs
削除する古いディレクトリを渡します。