我在使用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
...
第一个脚本,当我对第二个到最后一个目录进行硬编码时,查找扫描我所有的年份目录,但是在我的第二个脚本中,它只是给了我一个“没有这样的文件或目录”错误。
答案 0 :(得分:2)
模式[A1][AF][AV]
匹配以下文件/目录:AAA,AAV,AFA,AFV,1AA,1AV,......
要匹配目录A1
,AF
,AV
,请使用模式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开头,因此您不需要在[]。
中使用它