1

ここに私の問題があります: ユーザーが構成可能なさまざまなファイル名/場所 (データディレクトリにはサブディレクトリがある場合があります) を解決する必要があります。ループの前にファイル名を完全に解決できれば、次のスクリプトが機能します。

[プロンプト] さらに test.sh
#! /usr/bin/env バッシュ

newfile=実際のファイル名

`find -L ${FILE_PATH}/data -type d` のディレクトリの場合; 行う
    `ls -1 ${directory}/${newfile} 2>/dev/null` のファイル名の場合。行う
        if [[ -r ${filename} ]]; それから
            echo "${filename} が見つかりました"
        フィ
    終わり
終わり

[プロンプト] ./test.sh
[プロンプト] ${SOME_PATH}/実際のファイル名が見つかりました

ただし、newfile にワイルドカードが含まれている場合、内側のループは実行されません。単一のファイルのみを返す場合でも。

私はいくつかの正規表現で検索を使用しますが、適切な式を自動生成し、何かの置換を行うには注意が必要です (たとえば、pgb.f0010{0930,1001}{00,06,12,18} はいくつかのファイルに関連付けられます2010 年の 9 月 30 日と 10 月 1 日では、最初のグループ化は指定された日付のスクリプトによって計算されます)。

pgb.f0010093000 pgb.f0010093006 pgb.f0010093012 pgb.f0010093018 pgb.f0010100100
pgb.f0010100106 pgb.f0010100112 pgb.f0010100118 

Fedora 15 64 ビットを実行しています。

4

2 に答える 2

3
newfile = "*"
find -L $ {FILE_PATH} / data -name "$ {newfile}" \
| ファイル名の読み取り中
  行う
    if [[-r${ファイル名}]]; それから
      echo"${filename}が見つかりました"
    fi
  終わり

-また-

newfile = "*"
find -L $ {FILE_PATH} / data -name "$ {newfile}"-読み取り可能-exececho "Found {}" \;

-または正規表現を使用して-

newfile='。*/pgb.f0010(0930 | 1001)(00 | 06 | 12 | 18)'
FILE_PATH=。
-L ${FILE_PATH}/を見つけます。-regextypeposix-拡張\
  -regex "$ {newfile}" -readable -exec echo "Found {}" \;
于 2012-10-24T20:32:44.767 に答える
0

根本的な問題は、壊れたスクリプトでシェル展開に依存していることです。eval を使用:

#! /usr/bin/env バッシュ
FILE_PATH="."
newfile=pgb.f0010{0930,1001}{00,06,12,18}

ディレクトリ用 `find -L ${FILE_PATH}/data -type d`; 行う
    `eval ls -1 ${directory}/${newfile} 2>/dev/null` のファイル名の場合; 行う
        if [[ -r ${filename} ]]; それから
            echo "${filename} が見つかりました"
        フィ
    終わり
終わり
于 2012-10-25T16:17:08.673 に答える