• 締切済み

findとxargsの使い方で

unixで、findとxargsを使って検索を行っています。 以下の様に、 find . -type f | xargs コマンド 例えば、 find . -type f | xargs ls -l を実行すると、 「xargs: 入力ファイルが壊れています。: バイトシーケンスが正しくありません。」 が出力されます。 何が原因なのでしょうか。 また、解消方法はどのようにすればよいのでしょうか。 環境は solaris10 LANG=ja_JP.UTF-8 sh or bash

みんなの回答

回答No.1

始めまして。 以前、仕事で同じような現象がありました。 その時は、ファイル名の文字コードとlocaleの文字コードが一致していなかった為 発生していました。 LANG=ja_JP.UTF-8とされておりますが、一度、検索位置以下のファイル名の 文字コードを確認されてはいかがでしょうか。

abc999xyz
質問者

お礼

ありがとうごあいます。 文字化けしているファイルがありました。

関連するQ&A

  • unixのfindコマンド

    unixのfindコマンドで、ある複数のディレクトリから指定のファイル名だけを 検索し、その結果をgrepしたいのですが、 例えば 01_dir 02_dir : 11_di : 21_dir : と言うディレクトリがあります。 そこから、「0」で始まっているディレクトリの中なら拡張子が*.txtを 検索し、その検索したファイルに対して、grepを実行したいのですが、 上手くいきません。 もちろん、各ディレクトリには、「.txt」以外のファイルもありますし、 ファイル名にも条件を付与したいです。 以下の様に、 find . -name "0*_dir" -type d -print | xargs ls -l *.txt | grep "検索文字" find . -name "0*_dir" -type d -print | xargs ls *.txt | grep "検索文字" find . -name "0*_dir" -type d -print | xargs -i ls -l '{} /*.txt' | grep "検索文字" find . -name "0*_dir" -type d -print | xargs -i ls {} "検索文字" とやってみたのですがだめでした。 find ./ -type d \( -name '1_*dir' -o -name '2*_dir' -o -name '3*_dir' \) -prune -o -type f -print と「-prune」で除外するディレクトリを指定すればできなくはないですが、 すべてのディレクトリ書くのはいい方法ではないです。 よい方法をお願いします。 OSは、Solaris 11.3です。

  • findの結果をlsで詳細表示

    はじめまして。 Linux初心者です。 カレントディレクトリ以下のディレクトリやファイルの一覧を詳細表示するには「find ./ | xargs ls -lF」などとすると思いますが xargsを使用せずに「find ./ | ls -lF」とすると、なぜNGなのでしょうか。「xargs」の意味を調べると、 (1) 標準入力から空白か改行で区切られた文字列群を読み込む。 (2) xargsの引数のコマンドの後ろに、標準入力から受け取った文字列群を付け足して、そのコマンドを実行する。 とありました。上記の説明で「xargs」を付けることによる効果はわかるのですが、ls以外のコマンドを使用する際にもfindと組み合わせる際には、 すべてのコマンドで「xargs」を使用しなければいけないのでしょうか。 lsの結果をmoreする際などには、「ls | more」で良いと思うのですが、 「ls | xargs more」としない理由がわかりません。 どなたかわかりやすく教えて頂ければ幸いです。 よろしくお願いします。

  • findコマンドについて

    unix コマンドについて質問です。 ファイル1の中に"A=1" ," B=2", "C=3"という文字列が入っているとします。 ファイル2の中に"D=1" , "E=2", "F=3"という文字列が入っているとします。 そのことを自分は知りません。 Aという文字が入っているファイルを探す為、 以下のfindコマンドを打ち、ファイル1のlsの結果が表示されました。 find ./ -type f -exec grep 'A' {} \; -ls その後、出力されたファイル1の中からBとCでgrepしてB=2", "C=3"を表示したいと思います。 上のコマンドと併せて一度でできるコマンドを教えていただけないでしょうか? 宜しくお願いします。

  • unixのfindコマンドについて。

    unix(AIX)のfindコマンドで「find ./ -type f」というコマンドで一覧を取得しています。 「./」の中に「hogehoge -> /tmp/test」というような シンボリックリンクを使用しているディレクトリがある場合も、 「./hogehoge/hoge.log」 というように表示させるにはどうすれば良いでしょうか。 ご回答の程、宜しくお願い致します。

  • Bashシェルスクリプト findのエイリアスに引数を渡すにはどうすれ

    Bashシェルスクリプト findのエイリアスに引数を渡すにはどうすれば良いのでしょうか? $ alias a="ls $1 -a" $ a dir . .. ls_nara_ok $ alias a="find $1 -type d" $ a dir find: pathes must precede expression: a lsではうまく行くのに、findではエラーとなってしまいます。 どうすればスクリプト(エイリアス)内のfindに引数を渡せるのでしょうか?

  • SJISファイルを日本語でgrep

    UNIX環境で、 SJISファイルを日本語でgrepしたのですが、 ファイル名が出力されずにうまくいきません。 どなたかご教授願えないでしょうか。 [自分のコマンド] find ./ -type f -print | xargs nkf -e | grep 'テスト' とし、日本語は検地できたのですが、 ファイル名が出力されずに困っております。 grep -l としたら、↓のエラーが表示されました。 xargs: nkf: シグナル 13 によって終了しました サブディレクトリも含めて検地したいのですが、 なにかいい方法ありますでしょうか。

  • 文字コード変換、改行コード変換をn件ずつ実効

    UNIX初心者です。 指定ファルダにあるファイルについて 文字コード変換、改行コード変換を一括で行ないたいです。 しかし、以下のコマンドではファイル数が多すぎて、一括変換が出来ません。 find . -type f -print0 | xargs -0 nkf --overwrite -s --windows いい方法ありましたら、ご教示いただきたいです。 よろしく御願いします。 (具体例をだしていただけると助かります)

  • Solarisでshutdownコマンド使えない

    Solarisでshutdownコマンドが使えません (rebootやhaltはできます) どうしてもshutdownコマンドを使用してシステムを停止したいのですが、cannot createのエラーになり シャットダウンできません。(rebootやhaltはできます) shutdownコマンドが使えない原因とエラー解消方法について教えて頂きたいです。 bash-2.05# shutdown /usr/sbin/shutdown: /tmp/sh1370: cannot create bash-2.05# less cat /tmp/sh1370 cat: cannot open /tmp/sh1370    →ファイルなし bash-2.05# chmod -Rf 753 /tmp bash-2.05# shutdown /usr/sbin/shutdown: /tmp/sh1400: cannot create

  • UTF-8と標準エラー出力について

    LC_ALL=ja_JP.UTF-8 LANG=ja_JP.UTF-8 上記環境変数において # ls aaa ls: aaa: そのようなファイルやディレクトリはありません # man aaa aaa 、ホ・????奢・・??「、熙゛、サ、」 のように、lsのエラー結果はUTF-8で表示されているのですが、manのエラー結果はEUC-JPで表示されています。 これらの違いは、コマンド固有の問題なのでしょうか。 また、何か解決する方法はあるのでしょうか? 以上、よろしくお願いします。

  • findコマンドの-nameについて

    独習Linux第2版で勉強しています。 findコマンドのnameオプションについて質問があります。 テキストでは下記のようなコマンド例が載っています。 find Reports/ -type f -name '*\.bak' -exec rm {} \; nameオプションでワイルドカードを使いたいので パターン部分をシングルクォートで囲っていることは理解できるのですが 「.bak」のドット前にバックスラッシュがついている意味がわかりません。 ネットでfindコマンド例を探してみると、 find Reports/ -type f -name '*.bak' -exec rm {} \; という感じでバックスラッシュなしで説明されています。 実行結果に変わりはないようですが、意味が理解できず困っています。 教えてください。