따라서 해당 디렉토리에서 사람이 읽을 수 있는 유일한 파일을 열고 싶은 디렉토리가 있습니다. file *
각 파일의 유형을 인쇄하는 데 사용하고 있는데 파일이 ASCII 텍스트로 표시됩니다. 해당 특정 파일을 cat 이하로 리디렉션하여 내용을 표시하려면 어떻게 해야 합니까?
편집하다:
당신은 모두 훌륭합니다. 나는 모두 노력하고 있습니다.
답변1
awk
다음을 사용하여 ASCII 텍스트가 포함된 파일을 검색 할 수 있습니다 .
less $(file * | awk -F: '$2 ~ "ASCII text" {print $1}')
이는 실제로 여러 텍스트 파일이 포함된 디렉터리에서도 작동합니다.
답변2
다음 bash 함수는 현재 디렉터리에서 파일을 찾습니다. 그 중 하나가 "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
}