我需要使用日常脚本删除文件夹中的所有文件夹。需要保留当天的文件夹。
文件夹“ myfolder”具有3个子文件夹:“ test1”,“ test2”和“ test3”我需要删除除“ test2”以外的所有文件夹。
我正在尝试在此处匹配确切的名称:
find /home/myfolder -type d ! -name 'test2' | xargs rm -rf
或者
find /home/myfolder -type d ! -name 'test2' -delete
此命令也总是尝试删除主文件夹“ myfolder”!有办法避免这种情况吗?
这将删除其中的所有文件夹,./myfolder
但./myfolder/test2
所有内容将保留:
find ./myfolder -mindepth 1 ! -regex '^./myfolder/test2\(/.*\)?' -delete
find
启动查找命令。./myfolder
告诉find从目录./myfolder
及其内容开始。
-mindepth 1
不匹配./myfolder
自身,仅匹配其下的文件和目录。
! -regex '^./myfolder/test2\(/.*\)?'
告诉find排除(!
)任何与正则表达式匹配的文件或目录^./myfolder/test2\(/.*\)?
。^
匹配路径名的开头。该表达式(/.*\)?
匹配(a)斜杠后跟任何东西,或(b)完全不匹配。
-delete
告诉find删除匹配(即不排除)的文件。
考虑一个看起来像的目录结构;
$ find ./myfolder
./myfolder
./myfolder/test1
./myfolder/test1/dir1
./myfolder/test1/dir1/test2
./myfolder/test1/dir1/test2/file4
./myfolder/test1/file1
./myfolder/test3
./myfolder/test3/file3
./myfolder/test2
./myfolder/test2/file2
./myfolder/test2/dir2
我们可以运行find命令(不带-delete
)来查看其匹配的内容:
$ find ./myfolder -mindepth 1 ! -regex '^./myfolder/test2\(/.*\)?'
./myfolder/test1
./myfolder/test1/dir1
./myfolder/test1/dir1/test2
./myfolder/test1/dir1/test2/file4
./myfolder/test1/file1
./myfolder/test3
./myfolder/test3/file3
我们可以通过查看剩余的文件来验证此方法是否有效:
$ find ./myfolder
./myfolder
./myfolder/test2
./myfolder/test2/file2
./myfolder/test2/dir2
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句