이 명령은 디렉터리 대신 파일이 참조 되는지 확인하는 직접적인 방법을 stat
제공합니까, 아니면 제공합니까 ?bash
FILENAME
bash
and 를 사용하면 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
표준 테스트도 사용합니다 ).-e
stat
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