3

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

4 回答 4

2

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

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

于 2012-09-20T17:58:29.247 回答
0

尝试:

find /home/michael/foxpro/mount/A[1FV]/[12][0-9][0-9][0-9] -name '*.dbf' -type f -exec ln -s {} \;
于 2012-09-20T17:57:21.070 回答
0

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

[A1][AF][AV]

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

就您而言,我认为这应该可行:

/home/michael/foxpro/mount/A[1FV]/[12][0-9][0-9][0-9]
于 2012-09-20T17:58:05.543 回答
0

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

由于您的每个示例都以字母 A 开头,因此您不需要在 [] 中使用它。

于 2012-09-20T18:01:38.447 回答