2012-09-20 55 views
3

我在做什么错误的FIND命令?我想不通,为什么这个工程:Linux查找命令

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 
... 

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

回答

2

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

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

+0

{}是您定义的匹配列表时的关键,而不是[]。 –

0

尝试:

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

这不是发现一个问题,它与外壳的语法问题。这里的问题:

[A1][AF][AV] 

这给你喜欢AAA,1FV,AFV等括号语法各组中的一个字符匹配的组合,它是在两组之间进行选择。

在你的情况,我认为这应该工作:

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

我相信问题是你的正则表达式。你有这个: /[A1] [AF] [AV]/ 它将匹配AAA,AAV,AFA,AFV,1AA,1AV,1FA和1FV。你真正需要的是这样的,因为每个字母块[]与单个字符匹配:因为每个样本都以字母A开始,所以你不需要它在[ ]。