シェルスクリプトで*変数を使用してフォルダ内のすべてのファイルを参照する[重複]

シェルスクリプトで*変数を使用してフォルダ内のすべてのファイルを参照する[重複]

私はちょうどbashスクリプトを書いて、スクリプトからいくつかのファイルを実行しようとしました。

cp "myfolder/*.*" "otherfolder"

「myfolder/」について文句を言います。「見つけることができません。それではもう少し具体的に言おうとします。

cp "myfolder/*.ini" "otherfolder"

まだ文句を言います。

それから試しました。

cp "myfolder/${*}.ini" "otherfolder"

それでも文句を言うのは、コマンドライン引数に.iniサフィックスを付けるだけです。

cp "myfolder/{*}.ini" "otherfolder"

まだ成功していません。だから、各ファイルのフルファイル名を入力するとうまくいきました。しかし、bashファイルでアスタリスクを使用してディレクトリ内のすべてのファイルを参照する方法はありますか?それとも、私が間違っていることを誰が知っていますか?

ありがとうございます。

答え1

ファイル名のグロービングパターンを引用すると、シェルはそのパターンを拡張しません(これがこれを行う理由の1つです)。する通常、参照変数の拡張が必要であり、特にワイルドカードパターンとして解釈できる値が含まれている場合はさらにそうです。

変える

cp "myfolder/*.*" "otherfolder"

使用する必要があります

cp "myfolder"/*.* "otherfolder"

これにより、名前にドットがあるすべての項目がコピーされますmyfolder(ディレクトリ名であるとotherfolder仮定)。otherfolderデフォルトでは、この*パターンは隠しファイル名と一致せず、ほとんどのシェルはこのパターンを保持します。拡張されていない一致するファイル名がない場合。

同様cp "myfolder/*.ini" "otherfolder"に書く必要がありますcp "myfolder"/*.ini "otherfolder"

これ$* 変えるワイルドカードの観点から見ると物語が異なります*。 2つの間に実際の相関関係はありません。文字列は、シェル変数の最初の文字(デフォルトでは空白)で区切られた位置変数(「コマンド行引数」、、、、...)"$*"の連結です。$1$2$3IFS

関連情報