如何以递归方式找到所有`test_ *`文件,省略重新分析点?

时间:2015-02-01 18:09:17

标签: windows cmd find

为方便起见,我创建了一个相当大的静态链接#34;我的所有www\site1www\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_*

可以工作,但这似乎只省略了实际的联结而不是它们的子目录。

有办法做到这一点吗?

1 个答案:

答案 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。