布材

布材

問題があります。 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削除する古いディレクトリを渡します。

おすすめ記事