• ベストアンサー

ln ハードリンクをワイルドカードで複数同時作成するには

ln ハードリンクをワイルドカードで複数同時作成する方法ってあるのでしょうか? # ln ./fileA ./*/*/ として二つ下の階層フォルダの中全てにfileAをハードリンクやシンボリックリンクを作成したいのですがうまくいきません、一個だけ作成されるのですがそのほかは勝手にディレクトリのリンクを張ろうとしてエラーがでます。 エラーはフォルダの数だけでます。 # rm ./*/*/*.jpg rmみたいに複数のファイルを同時に処理はlnではできないのでしょうか? 検索してもどうしても目的の情報が手に入りません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

UNIXでのワイルドカードの展開って、個別のコマンドがやってるんじゃなくて シェル側で展開して、コマンドに引き渡しします。 たとえば、 ./A/a/ ./A/b/ ./B/a/ ./B/b/ ってディレクトリがある状態で ln ./fileA ./*/*/ と書いたら、 ln ./fileA ./A/a/ ./A/b/ ./B/a/ ./B/b/ って書いたのと同じことになりす。 これだと、 ./fileA ./A/a/ ./A/b/ ./B/a/ を示す4つのハードリンクを ./B/b/の下に作れ と指示したことになります。 こういう場合は、findかforを使って回すしかないんじゃないですかね。 たとえば、 for tmp in ./*/*/ ; do  ln ./fileA $tmp done (*で展開できる文字数にはシェル側に限界値があるので、あまりにディレクトリが大量だったり、ディレクトリ名が長いとかで、シェルの限界をこえるようならfindで)

shiroi1229
質問者

お礼

なるほどです! おかげさまで解決しました。 findは検索するだけだとおもってましたが こんな使い方があるのですね。

関連するQ&A

専門家に質問してみよう