我想使用查找并删除所有内容,但找到一个文件夹除外。例如
[oracle@SJOAM test]$ ls -l
total 4
-rw-r--r--. 1 oracle oinstall 0 Sep 2 02:05 a
-rw-r--r--. 1 oracle oinstall 0 Sep 2 02:05 b
-rw-r--r--. 1 oracle oinstall 0 Sep 2 02:05 c
-rw-r--r--. 1 oracle oinstall 0 Sep 2 02:05 d
-rw-r--r--. 1 oracle oinstall 0 Sep 2 02:05 e
-rw-r--r--. 1 oracle oinstall 0 Sep 2 02:05 f
-rw-r--r--. 1 oracle oinstall 0 Sep 2 02:05 g
drwxr-xr-x. 2 oracle oinstall 4096 Aug 7 07:25 test2
我想删除除 test2 之外的所有内容。
所以我开始
[oracle@SJOAM test]$ find test2 -prune -o -print
[oracle@SJOAM test]$
不返回任何内容。
q1)为什么上面没有 -name 的命令不显示其余文件?但是下面带有“-name”的命令显示了其余文件?
[oracle@SJOAM test]$ find -name test2 -prune -o -print
.
./e
./a
./b
./d
./f
./g
./c
使用 -name ,我可以看到其余文件。但我仍然可以看到“。”当前文件夹。
[oracle@SJOAM test]$ find -name test2 -prune -o -exec rm -r '{}' \;
rm: cannot remove directory: `.'
[oracle@SJOAM test]$ ls -l
total 4
drwxr-xr-x. 2 oracle oinstall 4096 Aug 7 07:25 test2
好了,所有文件都被删除了。但我感觉这不是正确的方法——它试图删除“。”
q2)如何防止删除“。”?
还,
[oracle@SJOAM test]$ find test2
test2
test2/a9
test2/a8
test2/a7
test2/a10
[oracle@SJOAM test]$ find -name test2
./test2
[oracle@SJOAM test]$
q3)为什么 -name 显示 ./test ,但如果没有 -name ,则不显示“./”?
答案1
这很好用
查找。!-名称 test2!-名称。-exec rm -r'{}'\;
通过添加! -name ...
,我们告诉 find 跳过.
和test2
对象。
回答您的第一个问题,来自man find
:
查找 [-H] [-L] [-P] [-D debugopts] [-Olevel] [路径...] [表达式]
如您所见,如果您在之前没有提供第一个选项[path...]
, find 会将第一个参数视为要搜索的路径,因此当您执行时find test2 -prune -o -print
,它会列出test2
文件夹中的所有文件,但由于或者语句按 -prune -o 排序。这个答案也与您的第三个问题有关。