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

最後から2番目のディレクトリをハードコーディングした最初のスクリプトは、すべての年ディレクトリを検索スキャンしますが、2番目のスクリプトでは「そのようなファイルまたはディレクトリはありません」というエラーが表示されます。

4

4 に答える 4

2

パターン[A1][AF][AV]は次のファイル/ディレクトリに一致します: AAA、AAV、AFA、AFV、1AA、1AV、…</p>

A1ディレクトリ、、、AFを一致させるAVには、パターンA[1FV]またはを使用します{A1,AF,AV}

于 2012-09-20T17:58:29.247 に答える
0

問題は正規表現にあると思います。これは /[A1][AF][AV]/ で、AAA、AAV、AFA、AFV、1AA、1AV、1FA、および 1FV に一致します。文字の各ブロック [] は単一の文字に一致するため、本当に必要なのはこれです: /A[1FV]/

各サンプルは文字 A で始まるため、[] で囲む必要はありません。

于 2012-09-20T18:01:38.447 に答える
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 の問題ではなく、シェル構文の問題です。問題は次のとおりです。

[A1][AF][AV]

これにより、AAA、1FV、AFV などの組み合わせが得られます。ブラケット構文は、各グループ内の 1 文字に一致し、グループ間の選択ではありません。

あなたの場合、これはうまくいくはずだと思います:

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