我想编写一个函数来查找我当前所在的当前目录中的文件。问题是,如果我在/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
选项,但似乎对我不起作用。
答案 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编号可能会在不同的文件系统之间重叠。