• ベストアンサー

Cシェルでの質問

シェルについての質問ですが、 1、nkdir /a/$b/$b`date+'%Y'` とディレクトリを作り 作成したディレクトリにファイルを移動したいのですが、 ディレクトリを作る際に、 /$bのしたに$bという名前のファイルしかでず、 うまく出来ません。 2、2つのファイル、a,bの差分をとるシェルを作りたいのですが、考えれば考えるほどどのような切り口で作ればよいか解らなくなっています。おそらくdiffコマンドを使うのでは?という所までは来ているのですが、その結果ファイルを使う必要があり、更に園ファイルを編集しなければならなく、訳がわからなくなっている状態です。 この2点、どちらかおわかりの方、どうかご教授のほどよろしくお願い致します。

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

  • ベストアンサー
  • tailkuppa
  • ベストアンサー率53% (52/98)
回答No.1

1. > nkdir /a/$b/$b`date+'%Y'` mkdir(ですよね?) では、2段階以上一度にディレクトリは作れません。 mkdir /a/$b mkdir/a/$b/$b`date +'%Y'` のように2回に分けてみてください。 2. 具体的にどのような差分を取り、どのように変更したいのでしょうか? diff コマンドでは、オプション指定することで、いろいろな形式でファイルの差分を取ることが出来ますので、とりあえずテストデータを作って、 diff ファイルa ファイルb diff -c ファイルa ファイルb diff -u ファイルa ファイルb などを実行してみてはどうでしょうか? 形式の種類についてはマニュアル(man diff) 等で見てください。 参考URL は GNU のdiff (linux では標準)のマニュアルです。 OSによっては、付属 の diff だともっと機能が少ない/異なるかもしれませんが、参考までに。 http://www.linux.or.jp/JM/html/gnumaniak/man1/diff.1.html

参考URL:
http://www.linux.or.jp/JM/html/gnumaniak/man1/diff.1.html

その他の回答 (2)

  • pikacchu
  • ベストアンサー率44% (11/25)
回答No.3

こんにちは。 1.mkdirコマンドの「-p」オプションを使用すれば多段階層のディレクトリが作成可能ですが。質問の意味を取り違えてるかも?です。   ちなみにSolaris、HP-UXはOKでした。 2.はtailkuppaさんの回答で十分ですよね?あと、「cmp」コマンド等もありますが。「man」コマンドにてマニュアルを参照してみて下さい。

回答No.2

> 1、nkdir /a/$b/$b`date+'%Y'` このとおりだとすると、(nkdir は mkdir のタイプミスとしても) date と + の間にスペースがありませんが、それが原因ではありませんか? > 2、2つのファイル、a,bの差分をとるシェルを作りたいのですが、 こちらは意味が不明です。どういう入力に対して、どういう出力を得たいのですか? diff a b > c sed xxx c > d とかですか?

関連するQ&A

  • UNIXで、ディレクトリを比較して、ファイル・ディレクトリの存在を比較したい

    やりたいこと自体は単純なことなのですが・・ UNIXのコマンドで、 2つのディレクトリA、Bを比較して、 Aだけにあるディレクトリ・ファイルのみを取得できるようなものを教えてください。 (ファイルが同一かどうかは問題ではなくて、あくまでも存在不存在の比較です。) コマンドを組み合わせたり、オプションを使ってもかまいません。 diffコマンドってこういうとき使えないのでしょうか。

  • 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コマンドは使わずにできる方法を探しています。 基本的な質問かもしれませんが、よろしくお願い致します。

  • 拡張子を指定して、ファイルの差分を取る方法

    WindowsXPです。 フォルダを比較して、ファイル(テキストファイル)の差分をとる方法をお教えください。 ここで重要な条件は、比較する拡張子を指定できなければなりません。 例えば、拡張子が、txtのファイルのみとか、txtとcfのみなど。 サブディレクトリの中のファイルも比較できなければなりません。 どうも、このような場合には、diffというものを使うらしいのですが、 コマンドプロンプトでdiffと打っても 「'diff' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 というだけで、使えないようです。

  • 複数のファイルをdiffで比較するために以下のシェルを作成しましたが

    複数のファイルをdiffで比較するために以下のシェルを作成しましたが diff: 「ファイル名」の後のオペランドがありません とエラーが表示されてしまいます。 htmlディレクトリとhtml_bkディレクトリ内にある ファイルを比較する処理になります。 ======================================== find ./html -name *.html -type f | while read f do echo $f | sed 's/html/html_bk/g' $temp diff $f $temp >> diff.txt done ====================================== $tempの中身はhtml_bkと変更されていました。 原因が分かる方がいましたら教えてください。

  • Bシェルで配列を使いたいのですが・・・

    下記のBシェルファイルで、あるテキストファイルの内容を1行ずつ読み込んで、その行を変数に代入し、後続にてその変数を表示するという処理を実現したいのですが、うまくいきません。 どのようにすればうまく行くのかまた、何故うまくいかなかったのかをご教授頂ければと思っております。 宜しくお願い致します。 <Bシェルファイル> #!/bin/sh exec 3<&0 < TBL.txt count=0 while read line do ex$count=$line count=`expr $count + 1` done exec 0<&3 3<&- echo ${ex[1]} exit 0 <結果> aho.sh: ex0=A コマンドが見つかりません。 aho.sh: ex1=B コマンドが見つかりません。 aho.sh: ex2=C コマンドが見つかりません。 aho.sh: 置換が正しくありません

  • Cシェルプログラムで、あるディレクトリ上にあるファイルサイズが0バイトのものを削除する

    Cシェルプログラムで、あるディレクトリ上にあるファイルサイズが0バイトのものを削除する処理を作りたいのです。どのようなコマンドを使って組んだらよいのでしょうか?

  • diffコマンドの無視条件指定方法(改行コード, 特定行)

    Unix等のDiffコマンドの結果で、いくつかの条件を無視したいのですが 方法がわかりませんでした。 よろしければどなたか教えていただけないでしょうか。 1.改行コードを無視したい  テキストの内容は同じだけど、改行コードが異なったファイルを扱う場合、すべての行が差分として扱われてしまいます。 改行コードを無視したdiffのとりかたはないでしょうか?  2.特定の行を無視したい  CVSのRCSキーワードが異なる行は無視して差分をとりたいのですが、 上手くいきません。。。-Iオプションで正規表現が指定できるとのことですが、挙動がどうも不明です。  上手くいかない例:diff -I '\$Date' a.c b.c ちなみに試みた環境は、cygwinでdiffは以下のバージョンです。 $ diff -v diff (GNU diffutils) 2.8.7 どちらか片方でもわかるかたいらっしゃいましたら、よろしくお願いいたします。

  • スクリプトでtxtファイルがブランクかを判別したい

    シェルスクリプトの勉強をしています 比較先の差分のみを抽出するのに以下のコマンドを使用しており、 差分があってもなくてもdiff_file.txtを出力しています。 diff hikaku_moto.txt hikaku_saki.txt | grep -E '^<' | perl -pe 's/^<\s//g' > diff_file.txt 比較をして出力したdiffファイルがブランクであれば次の処理を流す。 ブランクでなければ処理を止めるようなことをしたいのですが、ファイルの中身がブランクかどうかの 判別方法がわからず… テキストファイルの中身がブランクかどうかの判別方法を教えていただけますでしょうか? よろしくお願い致します

  • シェルスクリプト内のcdで、カレントディレクトリを変えるには?

    シェルスクリプト内のcdコマンドで、カレントディレクトリを変えるにはどうしたらいいか?をどうか教えて下さい。 MS-DOSのバッチファイル内で"cd XXXXX"と書き実行した時の動作を、UNIX(CygWin)環境でも行いたいです。 が、シェルスクリプトは(サブシェルで動く為)カレントディレクトリが変わってくれません。aliasコマンド等でいろいろ実験しましたが、DOSバッチファイルのように「バッチファイル単体でディレクトリ移動が出来る方法」を探し出せませんでした。 極めて初歩的とは存じますが、どうか宜しくお願い致します。

  • 【シェル】チルダの置換

    こんばんは。 Cシェルで1文字単位で置換する場合なのですが、 A→Y B→" C→3 D→~ のように対応しているファイルを読み込んで合致したらその文字に置換という方法にしています。その場合、D→~なので、ホームディレクトリが格納されてしまいます。 例えば、「ADC」という文字列があったら、「Y~3」というように置換したいのですが、「Y***/###3」のようになってしまいます。置換の際はechoとsedを使って、一度ファイルに落とし、それをまた変数に格納しています。 また、{や0もうまく読み込んでくれませんでした。クォーテーションでくくるとクォーテーションごと格納されました。("~" or '~') ファイルの方に\をつけて、\~でもうまくいきませんでした。 なんだか支離滅裂な文章ですが、ご存知の方いらっしゃいましたらどうぞ宜しくお願いします。