사용자가 소유한 폴더 찾기 [닫기]

사용자가 소유한 폴더 찾기 [닫기]

공유 폴더가 여러 개 있는데 사용자가 거기에 폴더를 여러 개 가지고 있는지 확인해야 합니다. 예를 들어:

/shared/release/
/shared/compile/
/shared/tags/
/shared/general/

이러한 폴더를 나열하고 사용자가 2개 이상의 폴더를 소유하고 있는지 알려주는 bash 스크립트가 필요합니다.

Bash를 사용하여 이러한 폴더 목록을 얻고 사용자가 여러 폴더를 소유하고 있는지 어떻게 확인할 수 있습니까?

답변1

사용 find:

find /shared -mindepth 1 -maxdepth 1 -type d -user <username>

<username>찾고 있는 실제 사용자 이름으로 바꾸십시오 .

  • -maxdepth 1재귀 순회를 방지합니다. 즉, /shared디렉토리 만 살펴봅니다.

  • -mindepth 1/shared소유한 경우 디렉토리 자체가 나열되지 않습니다 <username>. 이 동작을 원하지 않으면 이 옵션을 제거하십시오.

  • -type d디렉토리에만 관심이 있음을 나타냅니다.

  • -user <username><username>소유한 파일(디렉토리)을 찾고 있음을 나타냅니다.

답변2

그러면 어떤 사용자가 여러 디렉터리를 소유하고 있는지 표시됩니다.

find /shared -type d -printf '%u\n' | sort | uniq -dc

find이 작업에는 GNU 지원이 필요합니다 -printf. 귀하의 CentOS에는 이것이 있습니다.

그러면 여러 디렉터리와 해당 디렉터리가 있는 사용자가 나열됩니다.

find /shared -type d -printf '%u %p\0' | awk '{c[$1]++; a[$1]=a[$1](a[$1]?"\n  ":"")$0} END{for (user in c) if (c[user]>1) print c[user],a[user]}' RS="\0"

유연성을 극대화하기 위해 NUL로 구분된 출력을 사용합니다 find. 이를 위해서는 NUL 구분 입력을 지원하는 GNU awk 또는 최신 버전의 mawk가 필요합니다. CentOS를 사용하고 있으므로 괜찮습니다.

어떻게 작동하나요?

  • find /shared -type d -printf '%u %p\0'

    이는 find가 NUL로 구분된 목록에서 /shared소유자 %u및 디렉토리 이름을 찾아서 인쇄하도록 지시합니다.%p

  • awk '{c[$1]++; a[$1]=a[$1](a[$1]?"\n ":"")$0} END{for (user in c) if (c[user]>1) print c[user],a[user]}' RS="\0"

    이는 각 사용자가 소유한 디렉터리 수를 계산하고 여러 디렉터리를 소유한 사용자에 대한 보고서를 인쇄합니다. 더 자세하게:

    • c[$1]++첫 번째 입력 필드에 지정된 사용자 수를 늘립니다.

    • a[$1]=a[$1](a[$1]?"\n ":"")$0}이 사용자에 대해 찾은 각 디렉터리의 이름을 저장합니다.

    • END{for (user in c) if (c[user]>1) print c[user],a[user]}보고서를 인쇄하세요.

    • RS="\0"awkNUL로 구분된 입력을 사용하도록 지시합니다 . 이렇게 하면 디렉터리 이름에 줄 바꿈이나 기타 어려운 문자가 포함되어 있어도 프로세스가 안전해집니다.

관련 정보