bash

Linuxで複数のファイルの末尾にワンライナーで文字列を追記する方法

たとえばあるディレクトリの中に

text1.txt,text2.txt,text3.text,,,text30.txt

と30のファイルがあったとして、それらのファイルの全ての末尾に”hogehoge”と書き込みたい場合。

わたしはこう書きました

find ./ -type f | xargs -I@ echo "hogehoge" >> @

できたかなーと、ファイルの中をみてみると空でした。

かわりに、@というファイルが増えており、その中に30行のhogehogeが追記されていました。

なんじゃこりゃということで、Linuxマスターに尋ねてみると、どうやら |(パイプ)や >>(追記リダイレクト)の記号はそれの以前と以後でコマンドの影響範囲が異なるという事なんですね。

| xargs -I@ echo "hogehoge" >> @

は正しく認識されておらず、>>を介してしまったために@の置換が上手くいっていなかったということです。

ということで、上でやろうとしたことを正しく実行させるにはこうした方がよさそうです。

for n in $(find ./ -type f); do echo "hogehoge" > $n; done

findをコマンド置換によってforに投げて、1ファイル適宜hogehogeを追記するわけですね〜。

シェルスクリプトをわざわざ書くまでもなく、すっきりしました。

Linuxで複数ファイルのファイル名の中の複数の箇所の文字列を任意の文字列に変換する方法前のページ

SSH接続先のファイルをSCPコマンドでポートを指定して送受信次のページ

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

最近の記事

Twitter

PAGE TOP