1

我想编写一个函数来查找我当前所在的当前目录中的文件。问题是,如果我在 中,/home我想在和目录(位于我的主文件夹中)中查找文件。但是如果我在根文件夹中,我希望它们被剥离。我试过这个:sysdevvar

find -L . \( -path '/dev' -o -path '/var' -o -path '/sys' \) -prune \
  -o -type f -print \
  -o -type d -print \
  -o -type l -print

但它不起作用。如果我在要排除的每个路径的开头设置一个点 (.) - 它适用于根文件夹,但也排除其他目录中的此类目录,这是我不想要的。

有没有办法通过完整(全局)文件路径进行修剪?我尝试了一个-wholename选项,但它似乎对我不起作用。

4

2 回答 2

3

您可以使用find "$PWD",如find "$PWD" -path '/dev' -prune -o -print,通过绝对路径在当前目录中搜索。然后绝对路径匹配将成功。

于 2015-06-09T20:00:36.587 回答
0

-path不考虑/dev./dev相同,即使在运行时也是如此/,因为find在使用时对名称执行字符串比较-path-- 它不查找 inode 编号进行比较或执行规范化。

现在,如果您确实想要进行基于 inode-number 的查找,您可以这样做。

考虑:

# this relies on GNU stat for --format
listtree() {
  find -L . \( -inode "$(stat --format=%i /dev)" \
            -o -inode "$(stat --format=%i /var)" \
            -o -inode "$(stat --format=%i /sys) \) -prune \
    -o -type f -print \
    -o -type d -print \
    -o -type l -print
}

但是,请注意 inode 编号可以在不同文件系统之间重叠。

于 2015-06-09T19:59:54.500 回答