각 사용자의 폴더 소유권 목록을 생성하는 방법은 무엇입니까?

각 사용자의 폴더 소유권 목록을 생성하는 방법은 무엇입니까?

Ubuntu의 각 사용자에 대해 여러 개의 별도 목록을 생성하고 싶습니다. 목록에는 각 사용자에게 속한 파일과 폴더가 포함되어 있습니다.

시스템의 모든 사용자를 나열하려면 다음 명령을 사용하십시오.

cat /etc/passwd | awk -F: '{print $1;}'

"user1"이 첫 번째 결과라고 가정하면 내가 얻고 싶은 목록은 다음과 같습니다.

find / -user "user1" > user1.txt

그래서 제 질문은 가능한 한 적은 수의 명령을 사용하여 모든 목록을 얻는 방법입니다. 미리 감사드립니다.

답변1

getent passwd | cut -d: -f1 | while read USER ; do
  echo $USER #use this to show some kind of progress otherwise delete this string
  find / -user $USER > ${USER}.txt 2>/dev/null
done

추신: 자세한 내용은 다음을 확인하세요.쉘 루프.

그러나 이는 매우 나쁜 생각입니다. find사용자 수만큼 전체 파일 시스템에서 실행해야 합니다.

우리는 더 똑똑해지고 다른 방법으로 작업을 수행할 것입니다. find한 번만 실행하고 출력을 다음과 같은 파일로 분할합니다.

find / -printf "%u %p\n" | awk '{print $2 > $1".txt"}'

답변2

최소한 GNU find에는 -fprint다음 관용어를 사용하여 파일 시스템을 한 번만 통과하여 원하는 것을 달성할 수 있는 변형이 있습니다 find path -user user1 -fprint user1.txt.

먼저 생성 -user하고 -fprint매개변수를 지정합니다.

findargs=""
for user in $(cut -d: -f1 /etc/passwd); do
  if [[ -z $findargs ]]; then
    findargs="-user $user -fprint $user.txt";
  else 
    findargs="$findargs -or -user $user -fprint $user.txt"
  fi
done

이제 파일 시스템을 구문 분석할 준비가 되었습니다.

find path/to/parse $findargs

관련 정보