プロが教える店舗&オフィスのセキュリティ対策術

ln ハードリンクをワイルドカードで複数同時作成する方法ってあるのでしょうか?

# ln ./fileA ./*/*/
として二つ下の階層フォルダの中全てにfileAをハードリンクやシンボリックリンクを作成したいのですがうまくいきません、一個だけ作成されるのですがそのほかは勝手にディレクトリのリンクを張ろうとしてエラーがでます。
エラーはフォルダの数だけでます。

# rm ./*/*/*.jpg
rmみたいに複数のファイルを同時に処理はlnではできないのでしょうか?

検索してもどうしても目的の情報が手に入りません。
よろしくお願いします。

A 回答 (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で)
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/02/12 18:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!