バッシュ:ls -lとgrep

バッシュ:ls -lとgrep

私はこれを持っています:

find . -type f -exec file {} + | grep ASCII

出力は次のとおりです。

これが端末に印刷される内容です。

fileすべてのガイドラインのファイルサイズとパスをASCII

答え1

カットを使用して出力からファイル名を抽出し、パイプを介してfile | grep ASCIIファイルxargs stat -c ...名とサイズのみを表示します。

find . -type f -exec file {} + | grep  ASCII | cut -d: -f1 | xargs -d'\n' -r stat -c '%n %s'

ファイル名の前にサイズを指定するには、コマンド'%s %n'でそのサイズを使用します。stat

:改行文字を除くすべての文字を含むファイル名を処理します。これはGNUシステム(for-dとそのstat構文)を想定しています。ファイルパスに存在するとASCII誤検出が発生する可能性があります。

答え2

代わりにシェルループを使用します。を使用している場合は、実行してサブディレクトリに再帰的に移動bashできます。説明したように:**shopt -s globstarman bash

globstar
    If set, the pattern ** used in a pathname expansion con‐
    text will match all files and zero or  more  directories
    and  subdirectories.  If the pattern is followed by a /,
    only directories and subdirectories match.

したがって、これを念頭に置いて次のループを使用できます。

shopt -s globstar 
for file in **; do
    [ -f "$file" ] && file "$file" | grep -q "ASCII" && stat -c '%n %s' "$file"
done

答え3

そしてzsh

isascii() [[ $(file -b --mime-encoding - < ${1-$REPLY}) = us-ascii ]]
zmodload zsh/stat
zstat -n +size -- **/*(D.L+1+isascii)

分割:

  • **/*再帰ワイルドカード、1990年代初頭にzshに導入された機能と、後で他のいくつかのシェルにコピーされた機能、、、そして同じです。ksh93fishbashyashtcsh
  • (...)グローバル予選zsh:もう一つの90年代の特徴ですが、今日でも依然としてユニークです。 globに含めるファイルを追加指定するか、ファイルメタデータに基づいて拡張値を変更できます。ここで:
    • D:含むDot(隠し)ファイル
    • .:一般ファイルのみを含める
    • L+1:サイズが1バイトを超えるファイルのみを考慮します(そうでない場合は、fileそのファイルについて何も通知しません)。
    • +isasciiisascii一致するファイルごとにこのコマンドを呼び出して、ファイルを含めるかどうかを決定します。
  • isasciifileは呼び出された関数として定義されます$REPLY(これはglob修飾子に対して呼び出された関数にファイル名を渡す方法です。関数はそれを変更したり、配列からより多くのファイルを返すことができます$reply)。私${1-$REPLY}たちはここを使用しているので、引数として提供されたファイルの関数を使用することも、変更せずに終了$REPLY状態を介して決定を返すこともできます。

    -band の場合--mime-encoding(file少なくとも実装ではlibmagic) 推測されたエンコーディングのみ出力します。grep ASCIIファイルパスまたはファイルから抽出された他の情報に表示される可能性がある呼び出し出力よりもはるかに安定しています。file the-fileASCII

答え4

この試み:

file_nameのファイル名に対してfind . -type f -exec file {} + | grep ASCII | awk -F ':' '{print $1}'ls -lrth $ {file_name};を実行します。

関連情報