• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シェルスクリプト ファイル一括出力)

シェルスクリプトでファイル一括出力する方法

このQ&Aのポイント
  • シェルスクリプトを使用して、特定ディレクトリ以下のファイル名と内容を一括出力する方法について解説します。
  • lsコマンドやcatコマンドを使用せずに、for文を使って動的に繰り返し制御を行います。
  • また、サブディレクトリまで検索して結合する方法についても触れます。

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

  • ベストアンサー
回答No.4

#! /bin/sh # WORKDIR="/home/web" cd $WORKDIR find . -type f -name "*.php" -print | while read file ; do echo "=== $file ===" cat $file done ※ .phpだけではなく全ファイルという事なら『-name "*.php"』を削れば良いし、php もPhpもPHPもという事なら-nameの変わりに-inameを使えば良い。 > サブディレクトリまで検索して結合できると一番うれしいのですが できますよ。ディレクトリの階層を限定する場合にはfindコマンドの-d(-depth)オプションを指定すれば良いです。 『find . -type d -print 』でディレクトリを表示できますので、ディレクトリ一覧をみて対象にする階層の深さを考えても良いです。

crash___
質問者

お礼

丁寧な説明ありがとうございます。私のやりたいことそのままです。

その他の回答 (6)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.7

少し形式は異なりますが、簡単には、 cd /home/web more *.php > all.txt ファイル名の上下に ============= というのが入りますので、かえって見やすいのでは? サブディレクトリが一階層なら、 cd /home/web more *.php */*.php > all.txt

crash___
質問者

お礼

単純にmoreで出きるのですね。ラインが入るのは、見やすくて良いです。 ありがとうございます

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.6

グルたちの不機嫌そうな顔が目に浮かぶので 2点修正。 1) サブディレクトリ対応 2) 余計なファイルをソースディレクトリに作らない。 cd /home/web/ find . -name '*.php' -print0 | xargs -0 pr -F -n > /tmp/$(date '+%y%m%d')-php_srcs4print.txt コマンドマニュアル http://linuxjm.sourceforge.jp/html/GNU_findutils/man1/find.1.html http://linuxjm.sourceforge.jp/html/GNU_findutils/man1/xargs.1.html

crash___
質問者

お礼

確かに、ソースディレクトリに無い方が良いです。参考になりました。

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.5

やっとコマンド名おもいだせた! cd /home/web/ pr -F -n *\.php > all.txt http://linuxjm.sourceforge.jp/html/GNU_textutils/man1/pr.1.html 20年前にこんなにもたもた回答してたらグルたちの機嫌をそこねるところだったよ!

crash___
質問者

お礼

prでもできるのですね。ありがとうございます

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

追加。 もっといろいろ細かい制御や、表示の変更をしたかったら、PHPを使うというのも手です。 php php-script.php でphp-script.phpに書かれたスクリプトを実行できるはず。

crash___
質問者

お礼

このへんはもう少し勉強します

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

PHPやってるのなら、考え方はわかると思いますが ・filenameと表示 echo "filename" ・ファイル filenameの内容を表示 cat filename →filenameと表示してからファイル filenameの内容を表示 echo "filename" ; cat filename →変数filenameを表示してから、変数filenameの名前のファイルの内容を表示 echo "${filename}" ; cat "${filename}" → *.phpに一致するファイルに対して(B-sh系) for filename in *.php do echo "${filename}" ; cat "${filename}" done → サブディレクトリに再帰的に辿るには、findを使うとよい。 find . -name "*.php" -type f -print -exec cat \{\} \; for文については、man sh , man bash findについては man find も参考に。

crash___
質問者

お礼

丁寧な説明ありがとうございます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

find とか echo とか cat とかを駆使すればいいんじゃなかろうか.

crash___
質問者

お礼

そのとおりなのですが、私の力量では力技になってしまって、スマートにやる知識がありませんでした。

関連するQ&A