实际上我测试这个脚本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