• ベストアンサー

シェルスクリプト中でシンボリックリンクのリンク先を比較したい

ham_kamoの回答

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

No.1です。ちょっと改良してみました。 $ ls -l tmp1 tmp2 lrwxrwxrwx 1 fcuser users 13 9月 24 18:23 tmp1 -> /tmp/file AAA lrwxrwxrwx 1 fcuser users 16 9月 24 18:25 tmp2 -> /tmp/link-> test とすると、 $ ls -l tmp1 | sed 's/^[^>]*> //' /tmp/file AAA $ ls -l tmp2 | sed 's/^[^>]*> //' /tmp/link-> test となりました。ただし、ls -l で指定したファイルがシンボリックリンクではない場合、上記は正常に動作しません。 No.2さんの方法の方がスマートかと思います。

zyousuke
質問者

お礼

ham_kamoさん、再返信ありがとうございます。 今回教えていただいたsedの書き方は、どのような意味でしょうか。 行頭から最初の"> "までを消すという意味でしょうか。 実際に試したところ、うまくリンク先を取得できました。 私が今作成しているスクリプトでは、ファイル形式がシンボリックリンクだった場合のみ当該処理を実行するようにしていますので、ham_kamoさんが懸念している問題も解決済みです。 しかし、この手法にも弱点があると思います。 ユーザー名に" -> "が含まれていた場合どうなるか試してみました。 $ ls -l "link -> test" lrwxrwxrwx 1 test -> user test -> user 17 9月 24 21:33 link -> test -> /tmp/link -> test $ ls -l "link -> test" | sed 's/^[^>]*> //' user test -> user 17 9月 24 21:33 link -> test -> /tmp/link -> test 見てください。 このように最初に登場する" -> "まで lrwxrwxrwx 1 test -> が消されて残りの user test -> user 17 9月 24 21:33 link -> test -> /tmp/link -> test が表示されてしまいました。 うーん、脳味噌が混乱してきますね~。 ham_kamoさん、他にも何か妙案はありますでしょうか。

関連するQ&A

  • シェルスクリプトだと動かない [ -L fileS ] && echo "シンボリックリンクです"

    コマンドライン上で カレントディレクトリにある fileS がシンボリックリンクであるか調べる事ができるか、学習しております。コマンドライン上で [ -L fileS ] && echo "シンボリックリンクです" と打つと、動作する事を確認しました。 しかし、シェルスクリプトで(slink.sh) ======================= #!/bin/sh [ -L fileS ] && echo "シンボリックリンクです" ======================= と、同ディレクトリにスクリプトファイルを作成。 chmod ug+x slink.sh して ./slink.sh と打つと slink.sh: test: 引数が足りません。 と怒られます。 どこがどのように間違っているかわからないので ご教授いただけないでしょうか お願い致します。

  • シェルスクリプト内でのsloginの使用

    複数のサーバにアップした同一ファイルについて、シェルスクリプトからsloginしてlsコマンドによる日付の目視確認をしたいと思っています。 ところが、シェルスクリプトで slogin -i 公開鍵 user@host を実行しても slogin: : Name or service not known と表示されて、コマンドが認識されないようです。 sshにしても、同様でした。 ちなみに、scpによるコピーはうまくいきます。 sloginはシェルスクリプト内で使えないのでしょうか?

  • perlスクリプト内でシェルコマンドを実行するには??

    タイトル通りなのですが、perlスクリプト内でシェルコマンドを実行させる方法が分からなく、困っています。 実行したいシェルコマンドはUNIXのcrontab なのですが・・。 また、perlスクリプト内以外でシェルコマンドを実行する方法はあるのでしょうか?? どなたか分かる方いらっしゃいましたらご教授いただけると幸いです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • PHPからシェルスクリプトを実行

    サーバ:XREA・CORESERVER PHPからシェルスクリプトを実行することは可能ですか? exec関数などがsafemodeでは動かないとのことなので、phpをcgiとして動かしているのですが、 どうもうまくいきません…。 というのも、lsなどのコマンドを実行しても、command not foundになってしまいます。 どなたか分かる方いらっしゃいますか?

    • 締切済み
    • PHP
  • シェルスクリプトで古いファイルの自動削除をするには?

    UNIXで以下の仕様を持つシェルスクリプトを作成しようと していますが、どうもうまくいきません。 どなたか、いい知恵を貸していただけないでしょうか? 目的: 特定のディレクトリ内にあるファイルについて、 システム日付より3日前のタイムスタンプを持つファイルを 削除する。 留意点: ・削除対象のファイルは複数存在する場合がある。 ・ファイルサイズは1件あたり 0byte-数百Mbyte となる  可能性がある。 ・ファイル名は不定。 ・スクリプトはBシェルまたはCシェルとする。 参考: ・現在使用しているOSについて  ls -l でのタイムスタンプにおける出力形式は以下のとおり  (デフォルト値?)  ・ 9月 28日 2000年    または   10月 24日 10時45分 知っている限りのコマンドを使っていろいろやってみたんですが、 結局ダメでした。 よろしくお願いします。

  • Linuxシェルスクリプトを新しいコマンドにしたい

    Linux初級者です。よろしくお願いします。 OSにFedora Core 10, シェルにtcshを使用しています。 よく使用するコマンドを、まとめて一括で実行するように、 新しいコマンドを作成したくて、次のようなことをしていたのですが (1)ホームディレクトリにmybinというディレクトリを作成してPATHを通す。 (2)newbin1という以下の内容のシェルスクリプトを作成して、~/mybinに置いておく。 ================================== #!/bin/tcsh -f date #実行コマンド例1 echo $PATH #実行コマンド例2 ================================== (3)chmodコマンドでファイルに実行権限を与える。 上記のような方法で、作成したシェルスクリプト(newbin1)を PATHの通ったディレクトリ(~/mybin)に置いて、 > newbin1 とコマンドを呼び出しても、 "newbin1: コマンドが見つかりません" というエラーになってしまいます。 > which newbin1 とすると、ちゃんとファイルのパスが表示されるのですが、 *********************************************************** 自分で作成したシェルスクリプト(newbin1)を、 新しいコマンドとして認識させるにはどのようにすればよいのでしょうか。 また、そもそもシェルスクリプトを新しいコマンドにすることが 不可能だったりするんでしょうか? ************************************************************ 一括で実行したいコマンドが多い場合に、aliasで割り当てるのが大変なので、 できればaliasコマンドは使わずにできる方法を探しています。 基本的な質問かもしれませんが、よろしくお願い致します。

  • シェルスクリプト

    シェルスクリプトに関しては、まったくの初心者です。 OSは、SolarisとLinuxですが、シェルスクリプトを利用して下記のような自動実行プログラムを作りたいのですが、どなたかご教授下さい。 一台のWWWサーバのログ(例:access.log)を、1日に一回(出来ましたら朝の5時)に別サーバに送信するプログラムなのですがいかがでしょうか?このとき、出来れば送信先のファイル名は、送信した日付(例:20020222.log)にしたいです。説明不足かも知れませんが、ひとまずこれでお願いします。

  • シェルスクリプトをローカルで動作させるには

    cronジョブが使えるレンタルサーバーを使用しており、cronジョブから起動するshスクリプトを作ろうと思っています。 そこでシェルスクリプトを簡単に書こうと思っているのですが、プログラムはphpしかわかりません。勉強するためにはローカルで実行できる環境が必要だと思っています。 ネットでよく調べてみたのですが、シェルスクリプトをローカルで動作させる方法がわかりません。コマンドプロンプトから実行できたりしないんでしょうか?

  • シェルスクリプトの引数について

    test.sh '*.c' といったコマンドを入力した時に、 シェルスクリプト内で引数$1を受け取ったときに$1='*.c'となるのではなく、 カレントディレクトリ内にある'*.c'の正規表現にマッチするファイルが入ってしまっています。 例)カレントディレクト内にaaa.cファイルbbb.cファイルといったファイルがある時は、 $1=aaa.c bbb.cとなっています。 '*.c'の正規表現自体をシェルスクリプト内で受け取る方法はないのでしょうか? シェルはbashを使用しています。

  • シェルスクリプト 自身のファイルパスを取得する方法

    基本的なことかもしれないのですが、教えて下さい。 シェルスクリプトをLinuxで作成しています。 シェルスクリプトを実行して、実行したスクリプトまでの絶対パスを取得したいのですが、方法がわかりません。 いろいろ調べて、 dirname $0 という方法で出来るような記述も見つけたのですが、$0ではスクリプト名を取得することしか出来ず、ファイルパスを取得することが出来ませんでした。 OS : Linux カーネル : 2.6 です。 他に必要な情報があれば教えて下さい。 よろしくお願いいたします。