Linux上でのテキストファイルの扱いについての質問です。

カレントディレクトリにあるファイルのうち、
文字列fooを含むファイルをディレクトリbarに移動するには
どうすればよいでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/04/19 19:16:35
  • 終了:--

回答(2件)

id:trapon No.1

trapon回答回数92ベストアンサー獲得回数02005/04/19 19:26:10

ポイント5pt

http://homepage2.nifty.com/cs/linux_command/re-command/file_24.h...

$BF|7P(BLinux [Linux$B%3%^%s%I5U0z$-BgA4(B] $B%o%$%k%I%+!<%I$H$O(B

# mv foo* bar/

# mv *foo bar/

なんかで出来ると思います。

id:malts

あ、すいません。質問文が不十分でした。

ファイル名にfooを含むのではなく、ファイルの中にfooを含むものを移動したいのです。

2005/04/19 19:35:47
id:shampoohat No.2

shampoohat回答回数347ベストアンサー獲得回数02005/04/19 19:26:54

ポイント45pt

echo `grep foo *.txt | sed s/¥:.*//`


が何をするかわかりますよね。


で、

mkdir bar

cp `grep foo *.txt | sed s/¥:.*//` bar

がいいんじゃないかと。

id:malts

どうも、ありがとうございます。

ポイントは`コマンド`ですね。

2005/04/19 19:38:04
  • id:shampoohat
    (投稿者削除)

  • id:Einstein
    2番だと何回もコピーしちゃうよ

    あるファイルにfooが何行も有ったら、その行数だけの回数cpしちゃうから無駄ですね。何百も有ったらなかなか終わらない。

    ということで、

    mv `grep -l foo *` bar

    ですね。

    -lにより、ファイル名のみが出力されるのと、そのファイルで一回でも見つかるとスキャンを止めて次のファイルに行きます。
  • id:shampoohat
    Re:2番だと何回もコピーしちゃうよ

    >-lにより、ファイル名のみが出力されるのと、そのファイルで一回でも見つかるとスキャンを止めて次のファイルに行きます。

    素晴らしい。

    補足をいわしに投稿しようとしていましたが(下につけます)、grepがgrep -lの機能を持つのは知りませんでした。これは便利そうですね。

    ----------------------------------------------------------
    回答に、入れ忘れましたが、
    cp `grep foo *.txt | sed s/¥:.*// | uniq` bar
    と、uniqを入れてください。
    ファイル中に、複数回fooが出現した場合が回答に入れたものでは考慮されていませんでした。
    _|~|o

    > ポイントは`コマンド`ですね。

    はてなというオープンな場所ですので、くれぐれも意味を理解したうえで、使用していただけるのがよいと思っていたのですが、安心です。
    # バッククォートはかなり強力なので、便利ですよね。

    あと、1番目の方の回答を見て気付いたのですが、「移動」なのでcpではなくmvが適切ですね。
  • id:malts
    Re:2番だと何回もコピーしちゃうよ

    >-lにより、ファイル名のみが出力されるのと、そのファイルで一回でも見つかるとスキャンを止めて次のファイルに行きます。

    なるほど。
    補足ありがとうございます!
  • id:malts
    Re(2):2番だと何回もコピーしちゃうよ

    補足ありがとうございます。

    ># バッククォートはかなり強力なので、便利ですよね。

    ですね。
    ただ、コマンドの出力結果が多いと、引数が長すぎてエラーになる場合がありますね。
    xargsで回避すればよいのでしょうか。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません