使用查找和删除文件/文件夹 - 除 1 个文件夹外 - 具有挑战性

使用查找和删除文件/文件夹 - 除 1 个文件夹外 - 具有挑战性

我想使用查找并删除所有内容,但找到一个文件夹除外。例如

[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 排序。这个答案也与您的第三个问题有关。

相关内容