實際上我測試這個腳本bash腳本 - 刪除文件夾超過X天的除了一些和所有及其子文件夾/文件
find /Path/Folder/* -type d -mtime +7 ! -path "/Path/Folder/NODELETE1/*" ! -path "/Path/Folder/NODELETE2/*" ! -path "/Path/Folder/NODELETE3/*" -exec rm -rf {} \;
刪除所有文件/文件超過7天以上,除了NODELETE1
文件夾,NODELETE2
和NODELETE3
文件夾。
問題是,它顯然不工作,因爲它刪除了這些文件夾和裏面的所有文件。
這就是我想做的事:
我
/Path/Folder/NODELETE1/some files and folders
/Path/Folder/NODELETE2/some files and folders
/Path/Folder/NODELETE3/some files and folders
/Path/Folder/AFOLDER/somefiles and folders
/Path/Folder/ANOTHERFOLDER/somefiles and folders
/Path/Folder/...
/Path/Folder/FILE
/Path/Folder/ANOTHERFILE
/Path/Folder/...
我想自動刪除所有文件和文件夾舊的那7天(如此FOLDER
,ANOTHERFOLDER
,...
,FILE
,ANOTHERFILE
, ...
)以便
/Path/Folder/NODELETE1/some files and folders
/Path/Folder/NODELETE2/some files and folders
/Path/Folder/NODELETE3/some files and folders
腳本有什麼問題?
編輯的腳本建議:
#!/bin/bash
while IFS= read -r -d '' dir
do
# This line actually halts the control from entering if
# dirname contains either of the three names below. You could
# remove it and put your actual folder names.
[[ $dir =~ ^(NODELETE1|NODELETE2|NODELETE3)$ ]] && continue
# Suggest un-commenting the echo line below and comment rm to ensure
# you have only the folders you want to delete.
echo "$dir"
# rm -rf "$dir"
done< <(find /Users/Username/Desktop/test/* -type d -mtime +7 -print0)
爲了測試,我有:
/Users/Username/Desktop/test/NODELETE1
/Users/Username/Desktop/test/NODELETE2
/Users/Username/Desktop/test/NODELETE3
/Users/Username/Desktop/test/YESDELETE
和腳本路徑
/Users/Username/Desktop/TEST.sh
你可以試試'-not -path「/ Path/Folder/NODELETE1/*」'而不是'! -path「/ Path/Folder/NODELETE1/*」' – Inian
只有我患有偏執狂,絕不會直接執行'rm -rf'作爲'find -exec'的參數嗎? :) – jm666
@ jm666:同樣在這裏,多數民衆贊成爲什麼建議一個備用的專有名稱檢查 – Inian