プロが教える店舗&オフィスのセキュリティ対策術

cat A.txt >> B.txt

とコマンドを実行することで、B.txtの末尾にA.txtが挿入されると思います。

これを利用して、複数のファイル(拡張子がtxt)全てにA.txtの内容を挿入させたいのですが、その場合はどういったコマンドを打てばいいのでしょうか?

何か、ディレクトリの中のファイル全てに対して再帰的に処理を施す、という方法がありましたら、お教えください。

A 回答 (4件)

findの「-exec」に指定するコマンドには制限があるので、findだけではダメなような気がします。



「/tmp/testdir」以下にあるすべてのファイルに「/tmp/A.txt」の内容を
追加するコマンドは以下のようになります。、

>find /tmp/testdir -type f -name \*.txt -exec echo 'cat /tmp/A.txt >> {}' \; | sh -

findコマンドでテンポラリのシェルスクリプトを作ってから、
それをパイプでシェルに渡すしくみになっています。
後ろの「| sh -」を取り除いて実行すると、シェルに渡しているシェルスクリプトが表示されます。
    • good
    • 1
この回答へのお礼

ご回答、ありがとうございます。

理想通りの形で追記が出来ました!

お礼日時:2007/02/26 12:26

find . -name '*.txt' -exec cat test.txt >> {} \;


↑これは惜しいですねー。
この文字列をまずは shell が解釈するのですが、>> で区切られてしまいます。
find -name '*.txt' -exec cat test.txt を実行してその結果を {} というファイルに追記してしまいます。

仮に第一引数の内容を第二引数に追加するコマンド append があったとすると、
find . -name '*.txt' -exec append test.txt {} \;
でうまく行くと思います。
ひとつの解決策は append コマンドを用意してあげることですね。(そういうコマンドあったっけ?)

で、私の場合は
for i in `find . -name '*.txt'`; do
cat test.txt >> $i
done
とすると思います。
    • good
    • 1
この回答へのお礼

なるほど。そのようになっているわけですか。確かに、私のコマンドを実行すると新たに{}というファイルが作成されてしまいました。

No3の人のやり方で、何とかなったみたいです。
色々と説明していただき、ありがとうございました。

お礼日時:2007/02/26 12:26

まず


>find -name '*.txt' -exec cat test.txt >> {} \;
findの次はpathを書かないと駄目です。
    • good
    • 0
この回答へのお礼

そのようですね。
パスを書かなくても、何とかなったので……

ご指摘、ありがとうございました。

お礼日時:2007/02/26 12:28

一行で実行しようとすると難しいと思うので


下記のようなスクリプトを設けて実行したらどうでしょうか。

拡張子がtxtのリストを作成し、そのリストをforeachでループさせ
末尾にAAA.txtを挿入するというスクリプトです。

------------------------------
#! /bin/csh
#
foreach text ( XXX YYY ZZZ )

cat AAA.txt >> ${text}.txt

end
------------------------------

実行後すると、XXX.txt YYY.txt ZZZ.txt
それぞれの末尾にAAA,txtが挿入されているはずです。

この回答への補足

処理したいファイルは大量にある上にいくつかのディレクトリにばらけているので、ちょっとリストを作っていくのは手間です。だから、コマンドを利用したかったのですが・・・・・・

findコマンドを利用できればと思ったのですが、
find -name '*.txt' -exec cat test.txt >> {} \;
としても、上手くいきません({}というファイルが作成されてしまいます)
findはこの場合、利用できないのでしょうか?

補足日時:2007/02/21 14:46
    • good
    • 0
この回答へのお礼

このやり方も便利そうですね。
シェルでやる必要が出たとき、参考にさせていただきます。

ご回答、ありがとうございました。

お礼日時:2007/02/26 12:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング