디렉토리나 파일의 소유자를 찾고 해당 소유자만 반환하며 다른 것은 반환하지 않습니다.

디렉토리나 파일의 소유자를 찾고 해당 소유자만 반환하며 다른 것은 반환하지 않습니다.

나는 디렉토리의 소유자만을 반환하는 명령을 찾고 있습니다. ls -lat명령을 구문 분석하는 정규식이나 그와 유사한 것입니까? 다른 스크립트에서 결과를 사용하고 싶습니다.

답변1

stat ~에서GNU 핵심 도구다음을 수행할 수 있습니다.

stat -c '%U' /path/of/file/or/directory

불행하게도 버전이 많고 stat구문에 일관성이 별로 없습니다. 예를 들어 FreeBSD에서는 다음과 같습니다.

stat -f '%Su' /path/of/file/or/directory

이식성이 문제라면 아마도 다음을 사용하는 것이 더 나을 것입니다.질의 조언ls및 의 조합은 awk하나가 아닌 두 개의 프로세스를 시작해야 하지만 POSIX 표준 기능만 사용한다는 장점이 있습니다.

ls -ld /path/of/file/or/directory | awk '{print $3}'

답변2

구문 분석된 출력 ls은 좋은 생각이 아닙니다., 실제로 모든 "전통적인" 유니스에서 작동하는 처음 몇 개의 필드를 가져오는 것을 제외하고는 사용자 이름에 공백을 허용하는 Windows 구현과 같은 일부 플랫폼에서는 작동하지 않습니다.

ls -ld /path/to/directory | awk 'NR==1 {print $3}'

또 다른 옵션은 명령을 사용하는 것이지만 stat셸의 문제는 서로 다른 구문을 가진 여러 명령이 있으므로 셸 스크립트에서 이식할 수 없다는 것입니다(Linux 설치 전체에서도).statstat

특정 사용자가 소유자인지 테스트하는 것은 다른 제안입니다.

if [ -n "$(find . -user "$username" -print -prune -o -prune)" ]; then
  echo "The current directory is owned by $username."
fi
if [ -n "$(find . -user "$(id -u)" -print -prune -o -prune)" ]; then
  echo "The current directory is owned by the current user."
fi

답변3

GNU를 사용하여 이 작업을 수행할 수도 있습니다 find.

find "$directoryname" -maxdepth 0 -printf '%u\n'

이것은 GNU 시스템 외부에서는 이식 가능하지 않지만 Linux 배포판에서는 작동하지 않는다는 사실에 놀랐습니다.

답변4

ls -ld /path/to/file/or/directory | cut -d' ' -f3

관련 정보