Linux

管家舊文件和目錄

  • July 5, 2017

我遇到了一些麻煩,我正在嘗試編寫一個腳本,該腳本將創建一個超過 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="nordic@blah.com"
#MESSAGE="$LogFile"

#mailx -s "$SUBJECT" -r "info<sysdm@blah.com>" $TO < $MESSAGE

我有一個帶有變數的 config.cfg 文件,我要做的是創建一個文件列表和要保留的目錄名稱,然後刪除其餘部分。歡迎任何建議。

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。誰的名字儲存在$dir我們

  • 啟動一個find命令,其中包含以下內容:

    • 對於一個directory

      • 它不是目前目錄並且它早於 $days 然後將其名稱發送到管道另一側的 xargs,前提是在 tokeep 文件中找不到它。也不要進入此目錄,因為它已被標記為清除。
    • OTW,file如果它們超過 $days,則刪除它們。

  • xargs傳遞將被刪除的舊目錄。

引用自:https://unix.stackexchange.com/questions/375434