배시: 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에 도입된 기능과 나중에 다른 여러 셸에 복사된 기능,,, 그리고 같은 거죠 ksh93.fish​​bashyashtcsh
  • (...),글로벌 예선zsh: 또 다른 90년대 특징이지만 오늘날에도 여전히 독특합니다. glob에 포함할 파일을 추가로 지정하거나 파일 메타데이터를 기반으로 확장 값을 변경할 수 있습니다. 여기:
    • D: 포함하다ot(숨겨진) 파일
    • .: 일반 파일만 포함
    • L+1: 크기가 1바이트보다 큰 파일만 고려합니다(그렇지 않으면 file해당 파일에 대해 아무 것도 알려주지 않습니다).
    • +isascii: isascii일치하는 각 파일에 대해 이 명령을 호출하여 파일을 포함할지 여부를 결정합니다.
  • 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};을 실행합니다.

관련 정보