为什么参数-type d不能在find命令中生效?

时间:2013-10-14 01:59:42

标签: linux shell

我用过

$ find . -maxdepth 1 \( -path ./.repo -o -path ./out -o -path ./release \) -prune -type d -o -print
.
./external
./anno
./system
./cts
./bionic
./sdk
./abi
./build
./kernel
./hardware
./prebuilts
./MAKE_SUCCESS_FILE
./buildlog
./docs
./prebuilt
./libnativehelper
./bootable
./dalvik
./vendor
./make-export-env
./rawprogram0.xml.bak
./development
./libcore
./device
./frameworks
./pdk
./ndk
./packages
./Makefile
./gdk

只查找除当前目录中的.repo out和release之外的文件夹,但结果包含非文件夹文件,为什么?

2 个答案:

答案 0 :(得分:1)

你的大部分命令并不意味着你的想法。特别是,-prune不排除已识别的文件,它只是阻止它们进入(在您的情况下,-maxdepth 1已经保证了这种情况),并且-o表示“或“(短路布尔OR),因此您实际上将-print应用于满足您的测试的文件。

我认为你想要的是:

find . -maxdepth 1 -not -name .repo -not -name out -not -name release -type d
除了.../.repo之外,

打印./out以及./release中的所有目录。

答案 1 :(得分:0)

你想要修剪的东西来自-prune。 How to use '-prune' option of 'find' in sh?