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