it-swarm-ko.tech

디렉토리 또는 파일의 소유자를 찾으십시오.

디렉토리의 소유자를 반환하는 명령을 찾고 있는데 ls -lat 명령 또는 이와 유사한 것? 다른 스크립트에서 결과를 사용하고 싶습니다.

67
Jason

stat from GNU coreutils 다음을 수행 할 수 있습니다.

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

불행히도, 여러 버전의 stat이 (가) 있으며 구문에 일관성이 없습니다. 예를 들어, FreeBSD에서는

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

이식성이 문제가된다면 lsawk를 결합하는 Gilles 's suggestion 을 사용하는 것이 좋습니다. 하나 대신 두 개의 프로세스를 시작해야하지만 POSIX 표준 기능 만 사용하는 이점이 있습니다.

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

ls의 결과를 파싱하는 것은 좋은 생각이 아닙니다 그러나 처음 몇 개의 필드를 얻는 것은 예외입니다. 실제로 모든 "전통적인"유니스에서 작동합니다 (플랫폼에서는 작동하지 않습니다) 사용자 이름에 공백을 허용하는 일부 Windows 구현과 같은).

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

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

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

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

GNU 찾기로 이것을 할 수도 있습니다 :

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

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

10
mattdm

순수 bash에서는 ls의 출력을 배열로 변환하고 색인을 생성 할 수 있습니다.

# (lrwxr-xr-x, 1, myuser, staff, 36, Oct, 21, 16:36, /path/to/file)    
file_meta=($(ls -ld /path/to/file))
file_owner="${file_meta[2]}" # myuser

stat, find 또는 awk를 사용하는 것만 큼 우아하지는 않지만 핀치에서 작동 할 수 있습니다.

2
codehearts