• ベストアンサー

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

  • Linuxのハードリンクついて。

    ディレクトリ”mydir2/mydir”内の各ファイルに対して、 ディレクトリ”mydir0”内にハードリンクをそれぞれ同じファイル名で作成せよ。 また、絶対パス、相対パスを用いて求めよ。 という問題(3問)があるのですが、さっぱりわからなくて困っています。 ln ファイル名 ハードリンク名_h くらいしか思いつかなくて・・・; そもそも、リンクを貼るのにパスは使えるのか?という疑問もあります・・・ 詳しい方、お手数ですが、ご教授よろしくお願いします!! 足りない情報がありましたら、追記いたします。

  • バッチファイルで連続 ハードリンクを作成するやり方

    バッチファイルである特定のフォルダ内の特定のファイルのみ(大量に)をハードリンク化して指定したフォルダ内にハードリンクを作成させておきたい。 今作成したプロログラムは下記の通りなのですが なぜか上手くいきません。 一応ターゲットフォルダ内のデータは読み込んでいるようですが指定したフォルダ内に書き込む時のエラーかは分かりませんが「無効なパラメーターです」と表記されます。詳細は画像を見てください。 で。この操作を成立させるにはどうした命令を出したらいいのかアドバイスや例題・解説などあれば知恵をお貸しくださいませ。よろしくお願い申し上げます。ペコペコ ---------------------------------------------------------------- @echo off REM ループ処理 REM デスクトップステマニ一括変換フォルダからdwiファイルを指定する REM ターゲットフォルダ set targetDir=C:\Documents and Settings\ダウンロード専用\デスクトップ\ステマニ一括変換 REM ループ処理 for /f "usebackq delims==" %%D in (`dir /b /s "%targetDir%\*.dwi"`) do ( echo %%D fsutil hardlink crete "C:\Documents and Settings\ダウンロード専用\デスクトップ\テンポ解析テキスト\%%~nD" "%targetDir%\*.dwi" ) pause -------------------------------------------------------------------------------

  • 古いファイルを含むディレクトリのリネーム

    古いファイルを含むディレクトリのリネーム Linuxサーバのファイル整理の目的で 指定ディレクトリ以下の階層の複数フォルダについて 古い画像ファイル(90日以上変更がない".jpg"ファイル)しかないものは (1)ディレクトリ名をリネーム(ディレクレトリ名末尾に"_deleted"を追加) (2)ディレクトリ内の古いファイルを削除 したいと考えております。 find と xargs をつなげてあげれば、(2)単体であればできるのですが ex.) find . -type f -ctime +90 -print0 | xargs -0 rm 「格納されている全てのファイルが対象となる場合」に「ディレクトリ名をリネームして」 という処理で悩んでおります。 皆様、アドバイスの程お願い致します。 ========================================== 環境: ========================================== OS: CentOS5.4 bashなどを利用して,簡易的に実行できればと考えております。

  • あるフォルダ内と別フォルダリンク内を同時検索

    あるフォルダ内に、別のフォルダのリンクファイルを作成して あるのですが、これらの中にあるファイルをエクスプロラーの 検索で同時に探したいのですが、リンク先のフォルダ内は、 検索してくれません。 なんとか同時に検索出来るような方法はないでしょうか?

  • シンボリックリンク作成のバッチファイル

    親フォルダーに、aフォルダーとbフォルダーが入っています。 aフォルダー配下には、xフォルダーがあり、その中には複数のテキストファイルが入っています。 parent\a\x\test.txt parent\b\ 以下の様なバッチファイルを「送る」に登録しました。 @echo off rem 選択ディレクトリ配下のxディレクトリに移動 cd /D %1\x\ rem カレントディレクトリにあるすべてのファイルを、bディレクトリにコピー for %%i in (*.*) do ( copy "%%i" "..\..\b\" ) これにより、aフォルダーを選択してバッチファイルを実行すると、xフォルダー配下のテキストファイルがbフォルダーの中にコピーされることは確認しました。 ここで、コピーではなく、シンボリックリンク(mklink)を作成したいのですが、引数をどのように設定すればよいでしょうか。いろいろ試しましたがうまくいきませんでした。 ご教示よろしくお願いします。

  • 複数階層のフォルダを一度に作成する方法

    ASPでフォルダを作成したいのですが FileSystemObjectのCreateFolderだと 1階層分のフォルダしか作成できないので 一度に複数階層のフォルダを作成する方法がないかと悩んでいます。 「C:\aaa」というフォルダか元々あったとして その中に「bbb」というフォルダを作成したい場合は FileSystemObject.CreateFolder("C:\aaa\bbb") で作成できますが 「bbb」の中にさらに「ccc」というフォルダを作成したい場合は FileSystemObject.CreateFolder("C:\aaa\bbb\ccc") としてもbbbフォルダが存在しないためエラーになります。 FileSystemObject.CreateFolder("C:\aaa\bbb") FileSystemObject.CreateFolder("C:\aaa\bbb\ccc") と2回やればできるのですが 作成したいフォルダパスは階層も固定ではないので できれば1回で「bbb」フォルダも「ccc」フォルダも作成したいのです。 ループを回して上から順番にひとつひとつ作成するしかないのでしょうか? ASPで使用できる何かよい関数などご存知でしたら教えてくださいm(_ _)m

  • シェルスクリプトでファイル削除したい

    シェルスクリプト初心者です 今回、Linuxサーバ側にある複数のファイルを削除する 必要が出てきました このため、シェルスクリプトを書いて複数(2000程度) のファイルを削除しようとして試験をしています 試験のLinuxサーバ側の/root の中にfile1,file2・・・ 等々を置いています そこに次のようなスクリプトを記載して ファイルが置かれている場所と同じ/rootに置いて実行させるのですが ************** スクリプト ******** #!/bin/sh echo "start" # # rm F1010002.JPG rm F1010003.JPG rm F1010004.JPG echo "end" ****************************** 下記のようなエラーが出ます ****************************************** start rm: cannot lstat `F1010002.JPG\r': そのようなファイルやディレクトリはありません rm: cannot lstat `F1010003.JPG\r': そのようなファイルやディレクトリはありません rm: cannot lstat `F1010004.JPG\r': そのようなファイルやディレクトリはありません end ****************************************** サーバ側にSSHで入って、 # rm F1010002.JPG とひとつひとつ打鍵していくとファイルは削除されます スクリプトの間違い等あるのでしょうか 教えていただければ幸いです なお、ファイル数2000件程度のスクリプトを記載する方法は 別のソフトを利用して作成できるので・・・その件はいいのですが・・・

  • フォルダが削除できない

    こんばんは。 Windowsに共有ディレクトリを作成し、専用のユーザーとパスワードも作成し、Linuxからmountしました。 (mount後の読み書きは正常にできております) あるプロジェクトのバックアップをしたいと思い、シェル作成とテストをしながら、上記の共有フォルダにファイルやディレクトリをコピーしたり削除したりしておりました。 で、突然あるディレクトリだけが削除できなくなってしまいました・・・。 (LinuxからもWindowsからも削除できません) rmdirをすると、「ディレクトリが空ではありません」と怒られます。 (ls -laで見ても空です) rm -rfでも同じメッセージで削除できません・・・。 (rmなのに???) 削除できないフォルダにファイルを作成したりは、何故かできます。 フォルダを削除した後、ハードリンクの数が「0」です・・・。 (上記エラーメッセージ表示後に確認しました) なんですかね?これ。 今後はtarしてからWindows側にコピーする予定ですので、このフォルダ (実際には、ちょっとパスが深いので、マウントポイント以下は全て) を削除してしまいたいのですが・・・。 オーナーはrootです。 chmodは効きません・・・。 (777指定しても反映されてない、まぁroot作業なので関係ないですが・・・) Linuxに詳しい方、ご教示くださいますよう、よろしくお願い致します。

  • 1つのマウス等で複数のPCを同時に操作したいのですが。

    1つのキーボード、マウス、ディスプレイで複数のPCに、ほぼ同時に、同じ処理をさせたいのですが、何かいい方法はありますか? 処理といっても、それぞれのPCでそれぞれ同じWEBサイトを開いて、 そのサイトのボタンをクリックするだけなのですが、PCを切り替えながらではなく、同時に同じボタンをクリックできたらと思っています。 方法はソフト面からでもハード面からでもどちらでもいいので、何か良い方法をご存じの方がいらっしゃいましたら、教えてください。

  • 複数フォルダ内の複数画像を同時に一括リサイズしてくれるソフトを探してい

    複数フォルダ内の複数画像を同時に一括リサイズしてくれるソフトを探しています。 一つのフォルダ内にある複数画像を一括リサイズするソフトは多くあるのですが、複数のフォルダにまたがって大量にある画像を一括リサイズしてくれるソフトがなかなか見つかりません。 唯一「多画像拡縮」というソフトを見つけたのですが、私の環境ではエラーが出て使い物にならないので同じようなソフトを探しています。 よろしくお願いします。