디렉토리 또는 파일의 소유자를 찾으십시오. 소유자를 반환 할 명령을 찾고 있는데

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



답변

stat 에서 GNU로 coreutils는 이 작업을 수행 할 수 있습니다

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

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

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

휴대 성이 문제가되는 경우에, 당신은 개시 아마 더 좋을 것 같아 질의 제안 결합 lsawk. 하나 대신 두 개의 프로세스를 시작해야하지만 POSIX 표준 기능 만 사용하는 이점이 있습니다.

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


답변

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

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

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

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

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를 사용 하여이 작업을 수행 할 수도 있습니다.

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

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


답변

순수 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,하지만 핀치에서 일할 수 있습니다.


답변