如何通过完整路径忽略目录中的目录

时间:2015-06-09 19:50:29

标签: linux find gnu-findutils

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

var

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

有没有办法通过完整(全局)文件路径进行修剪?我尝试了find -L . \( -path '/dev' -o -path '/var' -o -path '/sys' \) -prune \ -o -type f -print \ -o -type d -print \ -o -type l -print 选项,但似乎对我不起作用。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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编号可能会在不同的文件系统之间重叠。