答え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 globstar
man 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に導入された機能と、後で他のいくつかのシェルにコピーされた機能、、、そして同じです。ksh93
fish
bash
yash
tcsh
(...)
、グローバル予選zsh
:もう一つの90年代の特徴ですが、今日でも依然としてユニークです。 globに含めるファイルを追加指定するか、ファイルメタデータに基づいて拡張値を変更できます。ここで:D
:含むDot(隠し)ファイル.
:一般ファイルのみを含めるL+1
:サイズが1バイトを超えるファイルのみを考慮します(そうでない場合は、file
そのファイルについて何も通知しません)。+isascii
:isascii
一致するファイルごとにこのコマンドを呼び出して、ファイルを含めるかどうかを決定します。
isascii
file
は呼び出された関数として定義されます$REPLY
(これはglob修飾子に対して呼び出された関数にファイル名を渡す方法です。関数はそれを変更したり、配列からより多くのファイルを返すことができます$reply
)。私${1-$REPLY}
たちはここを使用しているので、引数として提供されたファイルの関数を使用することも、変更せずに終了$REPLY
状態を介して決定を返すこともできます。-b
and の場合--mime-encoding
(file
少なくとも実装ではlibmagic
) 推測されたエンコーディングのみ出力します。grep ASCII
ファイルパスまたはファイルから抽出された他の情報に表示される可能性がある呼び出し出力よりもはるかに安定しています。file the-file
ASCII
答え4
この試み:
file_nameのファイル名に対してfind . -type f -exec file {} + | grep ASCII | awk -F ':' '{print $1}'
ls -lrth $ {file_name};を実行します。