답변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
: 포함하다디ot(숨겨진) 파일.
: 일반 파일만 포함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};을 실행합니다.