0

このコマンドが長い間機能しているのを見てきました:

find $dir -name $basename.[0-2][0-3][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-3][0-3][0-3] -exec rm -f {} \;

突然、動作しなくなりました。

ファイル名の間に一重引用符を入れようとし'ましたが、数日間機能しました。そして、二重引用符を使用し"ましたが、再び機能しています。

システムまたはアカウント (両方とも ksh を使用している) に変更が見つからなかったので、明らかな理由もなくこの機能が停止した合理的な理由を教えてください。

4

1 に答える 1

2

変数は二重引用符で囲み、ブラケット展開は一重引用符で囲む必要があります。前者は、ファイル名のスペース、タブ、および改行を保護するためのものです。find後者は、シェルの代わりにブラケット式の展開を遅らせることです。空白を保護するために、中括弧の周りに二重引用符が必要になる場合もあります。

find "$dir" -name "$basename".'[0-2][0-3][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-3][0-3][0-3]' -exec rm -f "{}" \;

動作しない理由は、ファイルが現在のディレクトリ (必ずしもではない$dir) に存在し、ブラケット式に一致し、早期に展開される可能性があります。

上記が機能しない場合は、中括弧を引用符なしで試してください。

于 2013-05-12T02:06:50.040 に答える