• ベストアンサー
  • 困ってます

シンボリックリンクがある場合のスクリプト

シェルスクリプトに関して教えてください。 ディレクトリを指定の場所にコピーしたいのですが、 コピーしたいディレクトリ配下に一部シンボリックリンクになっているファイルやディレクトリがあり、その部分のコピーがcpコマンドで出来ません。 シンボリックリンクになっているものは10個ほどと多くなく、そのリンク先もそれぞれわかっている為、 リストを書き出してそのファイル(ディレクトリ)はそれぞれ別の場所にコピーする ようなことは出来るのでしょうか? 日によってコピー元にシンボリックリンクのファイルがなくコピーしない時もあるので、 コピーするディレクトリ内にシンボリックがあれば、シンボリックリンク先にそのファイルをコピーするような処理です。 簡単に下記にイメージを書きます。 (1)home直下にcopy-motoディレクトリがあった場合、/usr/copy-sakiにコピーする cd /home if [ -d copy-moto ] ; then cp -pr copy-moto/* /usr/copy-saki echo "copy-sakiにコピーしました" fi ここはこんな感じでスクリプトを書きました。 更に(2)の事を追加したいです。 (2)copy-moto配下にhoge1やhoge2,hoge3と多くのディレクトリやファイルがある。  その中でhoge1やhoge2の下にSymbolicXXやSymbolicYYがあった場合、そのファイルやディレクトリはシンボリックリンク先にコピーしたい。  リストで以下のようにシンボリックになっているものは把握している。  そのリスト内にあるものは/usr/copy-sakiではなくhome/Symbolic_link~にコピーしたい的なことをしたいと思っています。    /home/copy-moto/hoge1/SymbolicXX→home/Symbolic_link/SymbolicXX  /home/copy-moto/hoge1/SymbolicYY→home/Symbolic_link/SymbolicYY  /home/copy-moto/hoge2/SymbolicZZ→home/Symbolic_link_AA/SymbolicZZ  /home/copy-moto/hoge2/SymbolicQQ→home/Symbolic_link_AA/SymbolicQQ   この例外処理?のような記載などどのようにスクリプトをかけばいいかわからず… わかる方いればご教授ください。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数155
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.1
  • notnot
  • ベストアンサー率47% (4714/9924)

やりたいことがいまいち明確に書かれてないですが、こんな意味ですかね? cd /home if [ -d copy-moto ] ; then cp -pr copy-moto /usr/copy-saki find /usr/copy-saki/hoge1 -type l -exec mv {} home/Symbolic_link \; find /usr/copy-saki/hoge2 -type l -exec mv {} home/Symbolic_link_AA \; fi

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ごちゃごちゃして質問わかりにくくて申し訳ございません。 execコマンドで問題なく出来ました。 ありがとうございます。

関連するQ&A

  • シンボリックリンクの検索

    そのディレクトリ以下のシンボリックリンクを検索してくれるコマンドというのはあるのでしょうか? /home/usr/以下に存在する全てのシンボリックリンクを調べたいのです。 よろしくお願いいたします。

  • tcsh 別サーバのディレクトリ名取得

    いつもお世話になってます。 標題についてご教授願えないでしょうか 先日同一サーバ内でディレクトリ名一覧を取得する事はできました。 しかし、他サーバのディレクトリ名を取得するにはsftp等で 繋いで取得するしか方法はないのでしょうか 現サーバ:test@hoge1 他サーバ test@hoge2 現サーバから他サーバの/usr/home/htdocs/配下のディレクトリ名を取得 find test@hoge2:/usr/home/htdocs/* とやっても 「そのようなファイルやディレクトリはありません」 と言われてしまいます。 よろしくおねがいします

  • シンボリックリンクの問題

    いつもお世話になっております シンボリックリンクを使う際に問題が発生しました。 #ln -s /mnt/hdb/user/test /home/user/test で、ユーザディレクトリに/mnt/hdb/user/testというディレクトリに向けてtestというシンボリックリンクを張ります。 #ls /home/user/ -F test@ ls -Fで確認したところ、シンボリックリンクファイルtestを上記のように確認できます。しかしながら、cdコマンドを実行すると、 #cd /home/user/test #pwd /mnt/hdb/user/test になるはずですが、 #cd /home/user/test #pwd /home/user/test なってしまいました。 これの原因で(推測)外からffftpで /home/user/testをアクセスしようとすると、No such file or directoryというエラーが出ました。 この問題どう解決できますか、ご教授よろしくお願いします。 ちなみに /mnt/hdb は増設したハードディスクをマウントしたところ 使用システム はFedora 4

  • 複数ファイルのシンボリックリンク

    例えば、「/usr/local/hogehoge/bin/」 の中にある実行ファイル全てへのシンボリックリンクを「/usr/local/bin」の中に生成したいとき、何かいい方法はないでしょうか。 「/usr/local/bin」には他にもファイルが入っているので、これ自体はディレクトリのままでお願いします。 イメージとしては、 $ cd /usr/local/bin $ ln -s /usr/local/hogehoge/bin/* というようなことをやりたいです。 (できませんでしたが・・)

  • UnixのシンボリックリンクファイルをWindowsマシンへコピーする際の問題回避方法

    UNIXのファイル群をバックアップの為にWindowsからFTPでgetしているのですが、シンボリックリンクファイルをWindowsにFTPするとエラーで途中で転送が停止してしまいます。 リンク状況はなるべく保持した形でバックアップを取りたいのですがどうしたらよいでしょうか? 考えられる方法として、(1)UNIXのシンボリックリンクをaliasに変換しながらGetするようなツールはあるのでしょうか? また(2)UNIX上で取り合えずシンボリックリンクの一覧を表示させたいのですが、どのようなコマンドがありますでしょうか? (find のオプションをチェックしているのですが良い方法が分からなかったので...) symbolic linkファイルを元ファイルで置き換え(cp -fpr等でリンク元がコピーされる)更にどのような置き換えをしたかログを残したく思っています。 以上宜しくお願いします。

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

    親フォルダーに、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)を作成したいのですが、引数をどのように設定すればよいでしょうか。いろいろ試しましたがうまくいきませんでした。 ご教示よろしくお願いします。

  • シンボリックリンクを作っても共有先からは使えない

    ・サーバー環境:OSX10.3.9、ユーザー名:net  外付HD「sotoduke1」、外付HD「sotoduke2」 ・クライアント環境:OSX10.3.9 & OS9 & WindowsXP この環境で、サーバー側のOSX上で ln -s /Volumes/sotoduke1 /Users/net/public と言うシンボリックリンクを作り、さらにその中に ln -s /Volumes/sotoduke2 /Users/net/public/tuika と言う別の外付HDをシンボリックリンクで貼った所、 クライアントからはsotoduke2のシンボリックリンクがただのファイルになってしまい、ダブルクリックしても開いてくれません。 何か手順が違うのでしょうか? なお、ユーザー「net」のホームディレクトリに相当する「sotoduke1」は見る事が出来ます。 アドバイスよろしくお願いします。

    • 締切済み
    • Mac
  • LinuxのシンボリックリンクをMacで開きたい。

    LinuxのシンボリックリンクをMacで開きたい。 Fedora12を使用している初心者です。御教授ください。 /home/userディレクトリ内に、/var/www/htmlディレクトリのシンボリックリンクを作成し、これをSamba接続したMac OS10.5.5から参照しようとすると、ディレクトリではなくファイルとして見え、フォルダを開くことができませんでした。 そこで、smb.conf内にunix extention = noの記述を加えたところ、フォルダとして認識されるようになったのですが、中身は空の状態です。中身ファイルの所有権を777に変更してみたりもしたのですがダメでした。 対処方法をお教え下さい。

  • シンボリックリンクでパミッションエラー?

    ブラウザからコマンド実行しようとするとエラーになります。 シンボリックリンクは関係ないかもしれません。 ・下記で何かおかしいことはあるでしょうか? ・「本体ファイル」と「シンボリックリンク」の「所有者」が異なっているのはマズいでしょうか? ・「x」がそれぞれ3つずつ表示されているので、実行権限に問題はない、という認識で合っているでしょうか? ■/usr/local/bin lrwxrwxrwx 1 root root phantomjs -> /home/user/phantomjs/bin/phantomjs ■/home/user/phantomjs/bin -rwxrwxr-x 1 user user phantomjs

  • kshのスクリプトでワイルドカードがうまく動作しな

    スクリプトtest.kshの中で、以下のようなコードを書いています。 mv /hogehoge1/* /hogehoge2/ 実行すると以下のようなエラーがでます。 mv: cannot stat '/hogehoge/*' : そのようなファイル、ディレクトリはありません。 ksh -x test.ksh で実行すると、 アスタリスクが展開されて以下のように実行されているようです。 mv /hogehoge/aaa /hogehoge/bbb /hogehoge/ccc /hogehoge2/ どうしたらターミナルで叩いたときと同じようにファイルの移動ができますか?