디렉토리의 소유자를 반환 할 명령을 찾고 있는데 명령과 같은 것을 구문 분석하는 정규 표현식과 같은 ls -lat
것입니까? 다른 스크립트에서 결과를 사용하고 싶습니다.
답변
stat
에서 GNU로 coreutils는 이 작업을 수행 할 수 있습니다
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}'
답변
출력을 파싱하는 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
,하지만 핀치에서 일할 수 있습니다.