为方便起见,我创建了一个相当大的静态链接#34;我的所有www\site1
,www\site2
等文件夹中的文件夹。
从www\
我想在所有子目录中找到以test_
开头的所有文件,而不会为所有网站递归static
。
我安装了gnuwin32,其中包括GNU查找版本4.2.20,但其符号链接选项似乎并不知道Windows联结("符号链接"使用mklink /j source target
创建)。我最接近的是:
find . -path "*static*" -prune -o -type f -name "test_*"
哪种作品。它有点不满意,因为它不是很通用,它还会返回所有static
个文件夹(但不是它们的内容)。
我想
dir /s /b /a:-L test_*
可以工作,但这似乎只省略了实际的联结而不是它们的子目录。
有办法做到这一点吗?
答案 0 :(得分:2)
为什么修剪后的目录仍然可以打印
如果您未对find
添加明确的操作,则意味着-print
会应用于整个表达式,因此
find . -path "*static*" -prune -o -type f -name "test_*"
实际上被执行为
find . `\( \( -path "*static*" -a -prune \) -o \( -type f -name "test_*" \) \) -print
因此,如果exp OR exp1
的左侧或右侧为真,find
仍然会打印该文件。如果您希望省略左侧,则可以向右侧添加显式操作
find . -path "*static*" -prune -o -type f -name "test_*" -print
以下符号链接
默认情况下, find
不遵循符号链接。尝试添加-L
,但我不确定这是否适用于Windows链接
-L
遵循符号链接。当查找或打印有关文件的信息时,使用的信息 应从链接所指向的文件的属性中获取,而不是从链接本身获取 (除非它是一个破碎的符号链接或发现无法检查链接的文件 点)。使用此选项意味着-noleaf。如果以后使用-P选项,-noleaf仍然会 生效。如果-L生效,find会在其期间发现指向子目录的符号链接 搜索时,将搜索符号链接指向的子目录。当-L选项生效时,-type谓词将始终与其类型匹配 文件,符号链接指向而不是链接本身(除非符号链接是 破碎)。使用-L会导致-lname和-ilname谓词始终返回false。