该find
命令提供了选项-path
。我知道人们必须定义从哪里开始寻找 [通常称为“路径”]。为了弄清楚它的用途,我发现了许多find -path -prune
用于排除某些路径的示例。
问题:解释是什么find -path
;此选项用于什么。
请注意:这对我来说似乎很清楚,但它并不像我猜的那样工作。我浏览了man
和info
页面,但我不明白这个选项的全部含义。
编辑我的理解是:find /some/path -name stuff
应该开始寻找“东西”,在目录开始,path
这是一个子目录some
。作品。但是,该-path
选项定义了什么?定义包括像这样的句子
不要对待
/
或.
特别
没有多大帮助,甚至更令人困惑。
我需要.git
从我的find
搜索中排除。为了实现这一点,我正在使用-path ./.git -prune
开关:
$ find . -path ./.git -prune -o \( -type f -o -type l -o -type d \) | grep '.git'
./.git
Run Code Online (Sandbox Code Playgroud)
然而,即使这跳过了 .git 目录的内容,它也会列出目录本身。当我添加时它有效-path ./.git -prune -o -print -a
find . -path ./.git -prune -o -print -a \( -type f -o -type l -o -type d \) | grep '.git'
Run Code Online (Sandbox Code Playgroud)
为什么这是必要的。我认为这两个命令应该有相同的输出。第二种语法非常难看。
我的标题可能用词有点奇怪,所以这是我的情况:我有一堆目录路径,例如
/a/b
/a/b/c
/a/b/c/d
/a/e/f/g/h
/a/e/f/g/h/i/j/k/l
/a/e/f/g/m/n/o
/a/e/f/g/m/n/p
Run Code Online (Sandbox Code Playgroud)
我想过滤掉列表中已经存在的条目的子路径的所有行,例如
/a/b
/a/e/f/g/h
/a/e/f/g/m/n/o
/a/e/f/g/m/n/p
Run Code Online (Sandbox Code Playgroud)
目录路径是从 获得的find
,因此它们应该可靠地按自上而下的顺序排列。解析为数组或多行字符串的解决方案都是受欢迎的。