사용자 소유 폴더 찾기

사용자 소유 폴더 찾기

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

/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

이를 위해서는 GNU가 find해당 작업을 지원 해야 합니다 -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"

유연성을 극대화하기 위해 find. 이 작업을 수행하려면 GNU awk 또는 NUL로 구분된 입력을 지원하는 최신 버전의 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로 구분된 입력을 사용하라고 지시합니다 . 이렇게 하면 디렉터리 이름에 줄 바꿈이나 기타 어려운 문자가 포함되어 있어도 프로세스가 안전해집니다.

관련 정보