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. Linux

    Seleniumを使おうとしてGoogleChromeが起動せずにハマった件

    ウェブのフォーム入力テストの自動化をしたくて、Seleniumを導入し…

  2. Linux

    [linux]ユーザーをグループに追加する

    いつも忘れるのでメモ新しいグループの作成#groupadd…

  3. Linux

    socket.ioの実装テスト

    node.jsを新しいプロジェクトに採用するにあたって、おさらい的な意…

  4. awk

    awkを使って一行の中の複数の要素をマッチさせる方法

    今年の末にyahooブログがサービスを終了するにともなって、そのブログ…

  5. bash

    ImageMagickを使って画像を一括で縮小処理するワンライナー

    Windowsの縮小専用とか、その他画像をドラッグアンドドロップで縮小…

  6. Linux

    WordPressのプラグインのインストールができない事でハマった事

    LinuxUbuntuのマシンにワードプレスの実験環境をつくろうと思っ…

コメント

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

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

PAGE TOP