Linux查找命令

时间:2012-09-20 17:53:57

标签: linux command find wildcard

我在使用FIND命令做错了什么?我无法弄清楚为什么会这样:

find /home/michael/foxpro/mount/A1/[12][0-9][0-9][0-9] "*.dbf" -type f -exec ln -s {} \;
find /home/michael/foxpro/mount/AF/[12][0-9][0-9][0-9] "*.dbf" -type f -exec ln -s {} \;
find /home/michael/foxpro/mount/AV/[12][0-9][0-9][0-9] "*.dbf" -type f -exec ln -s {} \;

但这不是:

find /home/michael/foxpro/mount/[A1][AF][AV]/[12][0-9][0-9][0-9] "*.dbf" -type f -exec ln -s {} \;

我的文件夹结构如下所示:

...../mount/A1/2012/file1.dbf
...../mount/A1/2011/file2.dbf
...../mount/A1/2010/file3.dbf
...../mount/AF/2012/file4.dbf
...../mount/AF/2011/file5.dbf
...../mount/AF/2010/file6.dbf
...

第一个脚本,当我对第二个到最后一个目录进行硬编码时,查找扫描我所有的年份目录,但是在我的第二个脚本中,它只是给了我一个“没有这样的文件或目录”错误。

4 个答案:

答案 0 :(得分:2)

模式[A1][AF][AV]匹配以下文件/目录:AAA,AAV,AFA,AFV,1AA,1AV,......

要匹配目录A1AFAV,请使用模式A[1FV]{A1,AF,AV}

答案 1 :(得分:0)

尝试:

find /home/michael/foxpro/mount/A[1FV]/[12][0-9][0-9][0-9] -name '*.dbf' -type f -exec ln -s {} \;

答案 2 :(得分:0)

这不是find的问题,它是shell语法的问题。这是问题所在:

[A1][AF][AV]

这为您提供了AAA,1FV,AFV等组合。括号语法匹配每个组中的一个字符,它们不是组之间的选择。

在您的情况下,我认为这应该有效:

/home/michael/foxpro/mount/A[1FV]/[12][0-9][0-9][0-9]

答案 3 :(得分:0)

我认为问题在于你的正则表达式。你有什么是这个:         / [A1] [AF] [AV] / 它将匹配AAA,AAV,AFA,AFV,1AA,1AV,1FA和1FV。你真正需要的是这个,因为每个字母块[]匹配一个字符:         / A [1FV] /

由于您的每个样本都以字母A开头,因此您不需要在[]。

中使用它