【发布时间】:2017-07-09 12:39:01
【问题描述】:
我实际上是在测试这个脚本
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/*" -
只有我患有偏执狂,永远不会直接执行
rm -rf作为find -exec的参数? :) -
@jm666:这里也一样,这就是为什么建议使用正确名称检查的替代方法