Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在按完整路径查找中忽略目录_Linux_Find_Gnu Findutils - Fatal编程技术网

Linux 如何在按完整路径查找中忽略目录

Linux 如何在按完整路径查找中忽略目录,linux,find,gnu-findutils,Linux,Find,Gnu Findutils,我想写一个函数来查找我当前所在的当前目录中的文件。问题是,如果我在/home,我想在sys、dev和var目录(在我的主文件夹中)中查找文件。但如果我在根文件夹中,我希望它们被剥离。我试过这个: find -L . \( -path '/dev' -o -path '/var' -o -path '/sys' \) -prune \ -o -type f -print \ -o -type d -print \ -o -type l -print 但它不起作用。若我在每个要排除的路

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

find -L . \( -path '/dev' -o -path '/var' -o -path '/sys' \) -prune \
  -o -type f -print \
  -o -type d -print \
  -o -type l -print
但它不起作用。若我在每个要排除的路径的开头设置一个点(.),它适用于根文件夹,但也排除了其他目录中的此类目录,这是我不想要的


有没有办法按完整(全局)文件路径进行修剪?我尝试了一个<代码> -全名< /Cord>选项,但它对我来说似乎不起作用。

<代码> -PATH < /C>不考虑<代码> /DEV和<代码> /DEV是相同的,即使在<代码> /< /代码>中运行时,因为

find
在使用
-path
时会对名称执行字符串比较,所以它不会查找索引节点编号进行比较或执行规范化

现在,如果您确实想进行基于inode编号的查找,您可以这样做

考虑:

# 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编号可能在不同的文件系统之间重叠。

您可以使用
查找“$PWD”
,如
查找“$PWD”-path'/dev'-prune-o-print
中所述,按绝对路径在当前目录中搜索。然后,绝对路径匹配将成功

'sys'
和结束部分之间缺少的空格是真的吗?还是您的帖子的产物?另外,“寻路”与文件系统路径完全无关;它指的是人工智能算法。虽然“find”标记是重载的,但它实际上比这个查询的“pathfinding”要好。顺便说一句,既然您正在编写一个函数,为什么不在函数本身中加入条件逻辑呢?
…将在我当前所在的目录中查找文件的函数
=>maxdepth有任何限制吗?我假设“in”表示“under”,虽然事实上,这些都不是一回事。