stat 또는 bash를 사용하여 FILENAME이 파일을 참조하는지 확인하는 방법

stat 또는 bash를 사용하여 FILENAME이 파일을 참조하는지 확인하는 방법

이 명령은 디렉터리 대신 파일이 참조 되는지 확인하는 직접적인 방법을 stat제공합니까, 아니면 제공합니까 ?bashFILENAME

bashand 를 사용하면 stat내 추악한 해결책은 다음과 같습니다.

if RESPONSE="$(LC_ALL=C stat -c%F FILENAME)"\
 && [ "$RESPONSE" = 'regular file'\
 -o "$RESPONSE" = 'regular empty file' ]
then
    # do something ...
fi

당신은 또한 볼 수 있습니다이 관련 질문입니다.

답변1

-f주어진 이름이 일반 파일의 이름이거나 일반 파일에 대한 심볼릭 링크인 경우 테스트는 참입니다. -h주어진 이름이 심볼릭 링크의 이름이면 true를 테스트합니다. 이는 man test(또는 man [) 및 쉘 세션 모두에 help test기록됩니다 bash. 두 테스트 모두표준 테스트모든 POSIX test[유틸리티가 이를 수행할 수 있습니다.

name=something

if [ -f "$name" ] && ! [ -h "$name" ]; then
    # "$name" refers to a regular file
fi

OpenBSD에서도 동일한 작업이 수행됩니다 (다음 코드는 호출하기 전에 파일 시스템에 이름이 있는지 확인하기 위해 stat표준 테스트도 사용합니다 ).-estat

name=something

if [ -e "$name" ] && [ "$(stat -f %Hp "$name")" = "10" ]; then
    # "$name" refers to a regular file
fi

(파일 형식은 10일반 파일을 의미합니다.)

GNU를 사용하는 경우 stat:

name=something

if [ -e "$name" ] && [[ $(stat --printf=%F "$name") == "regular"*"file" ]]; then
    # "$name" refers to a regular file
fi

마지막 테스트의 패턴은 문자열 sum regular file과 일치합니다 regular empty file.

답변2

stat요청된 솔루션입니다.

stat --printf "%F" file-name

설명서를 참조하세요(아래 발췌)

       -c  --format=FORMAT
              use the specified FORMAT instead of the default; output a newline after each use of FORMAT

       --printf=FORMAT
              like  --format,  but interpret backslash escapes, and do not output a mandatory trailing newline;
              if you want a newline, include \n in FORMAT

The valid format sequences for files (without --file-system):

       %F     file type

GNU coreutils 8.30 

관련 정보