質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
gnuplot

gnuplot(ニュープロット)は、2次元や3次元のグラフ作成ができるソフトウェアです。さまざまな数式やデータ集計などのグラフを描写することが可能で、特に2次元グラフを描画する機能は強力です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

4回答

2259閲覧

findでヒットしたディレクトリに移動してはあるコマンドを実行するにはどうすればいいでしょうか?

nishiys

総合スコア33

gnuplot

gnuplot(ニュープロット)は、2次元や3次元のグラフ作成ができるソフトウェアです。さまざまな数式やデータ集計などのグラフを描写することが可能で、特に2次元グラフを描画する機能は強力です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2017/09/15 16:52

###質問
カレントディレクトリ以下の中でcaseのディレクトリに移動し、その中にあるgnuplotのスクリプトファイルfoo.gpを実行したいです。(caseのディレクトリには全てにfoo.gpが入っています。)
cdであるcaseディレクトリに移動し、次のcase*ディレクトリに移動する前にgnuplot "foo.gp"を実行したいということです。

#現在の状況
①:findの出力をfor文に渡して以下のようなイメージで動かしたいです。
以下のようにコマンドを打ちましたが、うまくいきません。
$ find ./ -name "case*" | for f in {}

do
cd $f
gnuplot "foo.gp"
done

以下のエラーが出ます。
-bash: cd: {}: No such file or directory
"foo.gp", line 0: Cannot open script file 'foo.gp'

②:find -execコマンドを使ってcdコマンドとgnuplotコマンドを連続して実行したいです。
$find ./ -name "case*" -exec cd {} ; -exec gnuplot "draw_logs.gp" ;
上のコマンドもダメでした。

###補足情報(言語/FW/ツール等のバージョンなど)
macOS Sierra
iTerm2
bash

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

下記ではいかがでしょうか。

bash

1find . -type d -name "case*" -execdir gnuplot foo.gp \;

投稿2017/09/15 23:40

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nishiys

2017/09/17 09:25

ご回答ありがとうございます。 試して見ましたが、Cannot open script fileとなってしまいました。
guest

0

ベストアンサー

Bash

1find ./ -type d -name "case*" -exec sh -c "cd {}; gnuplot foo.gp" ";"

cdgnuplotは、同一シェル内で実行する必要があるので、sh -cを使います。

投稿2017/09/15 23:26

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nishiys

2017/09/17 09:15

find ./ -type d -name "case*" -exec sh -c "cd {}; gnuplot foo.gp" \; で実行できました。 shコマンドは-cオプションで以下の記述をシェルの入力行であるかのように実行することができるのですね。 cd と gnuplotを続けて処理したかったのでこのような記法が学べてよかったです。ありがとうございました。
guest

0

自分は xargs より for 派なのでこうですかね。

sh

1WORKDIR=$(pwd) 2for x in $(find . -name "case*" -type d) 3do 4cd ${x} && gnuplot "foo.gp" 5cd ${WORKDIR} 6done

投稿2017/09/15 21:33

編集2017/09/15 21:35
scsi

総合スコア2840

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nishiys

2017/09/17 09:08

for文ではin以下に$()のコマンド置換で書けばよかったのですね。 ありがとうございます。
guest

0

これでどうでしょう。

find ./ -name '*case' |xargs -i echo "cd {}; gnuplot foo.gp" |sh

投稿2017/09/15 17:40

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nishiys

2017/09/15 19:14

ご回答ありがとうございます。 find ./ -name 'case*' |xargs -0 -Irc echo "cd rc; gnuplot 'foo.gp'" |sh とすると、 find ./ -name 'case*' |xargs -Irc echo rc した時に最初に出てくるファイルに対してのみ実行され、それ以降は No such file or directoryとなってしまいます。。。
KojiDoi

2017/09/15 20:18

find /home/hoge ... と、最初のディレクトリ指定を絶対パスにしてみてください。
otn

2017/09/15 23:27

xargs -i echo "pushd {}; gnuplot foo.gp; popd" ですね。
nishiys

2017/09/17 09:04

ご回答ありがとうございます。 検索が相対パスで検索していたため、最初に見つかったディレクトリに移動してから次のcdコマンドで次のディレクトリに移動する時にうまく行っていなかったということですね。 無事解決できました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問