そのため、そのディレクトリから人が読める唯一のファイルを開きたいディレクトリがあります。file *
各ファイルの種類を印刷するために使用していますが、ファイルはASCIIテキストとして表示されます。その特定のファイルをcat以下にリダイレクトしてコンテンツを表示するにはどうすればよいですか?
編集する:
あなたは皆素晴らしいです。みんな頑張っています。
答え1
awk
以下を使用して、ASCIIテキストを含むファイルを検索できます。
less $(file * | awk -F: '$2 ~ "ASCII text" {print $1}')
これは実際には複数のテキストファイルを含むディレクトリでも機能します。
答え2
次のbash関数は、現在のディレクトリ内のファイルを探します。そのうちの1つが「ASCIIテキスト」を報告すると、そのファイルになりますcat
。
filecat() {
local files=(./*)
local count=0
local filename=
local f=
for f in "${files[@]}"
do
if file "$f" 2>/dev/null | grep -q ": ASCII text$"
then
count=$((count + 1))
filename="$f"
fi
done
if [ "$count" -eq 1 ]
then
cat "$filename"
fi
}
答え3
を使用すると、zsh
次の関数を定義できます。
istext() [[ $(file -b --mime-type -- "${1-$REPLY}") = text/* ]]
その後、次のグローバル修飾子で使用できます。
less -- *(.L+0+istext)
現在のディレクトリで、テキスト形式が空でない(L+0
長さが0より大きい)一般ファイル()を表示します。.
file
答え4
less
ASCIIテキストファイルのみ:
less_if_text() {
# $1 is the file name
if file $1 | grep -q 'ASCII .* text' ; then
less $1
else
echo "Not a text file: $1"
fi
}
シンプルだがわかりやすい方法でテキストファイルを一覧表示します。
ls_texts() {
ls -a | while read filename; do
(file $filename | grep -q 'ASCII .* text') && echo $filename
done
}
しかし、上記の速度はそれほど高速ではありません。file -f
複数のfile
通貨を避けるためのより速い方法grep
:
ls_texts() {
ls | file -f - | egrep ':\s+ASCII .* text' | while read fname
do cut -d ':' -f 1
done
}