BASH에서 각 사용자의 홈 디렉터리에 파일을 복사하는 방법은 무엇입니까?

BASH에서 각 사용자의 홈 디렉터리에 파일을 복사하는 방법은 무엇입니까?

각 사용자의 홈 디렉터리에 파일을 복사하려고 합니다. 이상적으로 파일은 chown/chgrp여야 하지만 실제로는 제가 요구하는 것이 아닙니다. 내 진짜 질문은 와일드카드를 사용하여 각 하위 디렉터리를 선택하는 방법입니다.

$ touch testfile
$ sudo cp testfile /home/*/

이것은 파일을 현재 사용자의 디렉토리에 성공적으로 복사하지만 다른 모든 사용자에 대해서는

cp: omitting directory '/home/user2/'
cp: omitting directory '/home/user3/'

등. 귀하의 답변에 미리 감사드립니다.

답변1

cp여러 대상은 허용되지 않으므로 루프를 직접 제공해야 합니다. 당신이하고 싶은 일과 직접적으로 동등한 것은

for homedir in /home/*; do sudo cp testfile "$homedir"; done

일반적인 참고 사항: 사용자 이름에 공백이 없다고 가정하고 홈 디렉터리가 정확히 의 디렉터리라고 가정합니다 /home. 그렇지 않으면 홈 디렉터리 위치를 에서 가져와야 /etc/passwd하지만 여기에는 시스템 사용자가 포함되므로 충분히 높은 UID, 그리고 사용자 UID의 시작 위치는 분포에 따라 다릅니다.

답변2

루프 내에서 이 작업을 수행하는 아이디어를 주신 @UlrichSchwarz에게 감사드립니다. 마음의 평화를 얻기 위해 일반 파일을 덮어쓰지 않았는지 확인하는 검사를 추가했습니다.

# First command-line arg is the file to be copied
for homedir in /home/* ; do 
    if [ -d "$homedir" ] ; then
         cp $1 "$homedir"
         user=$(ls -ld $homedir | awk '{print $3}')
         chown --verbose $user:$user $homedir/$1
    fi
done

이는 또한 그룹 및 사용자 소유권을 변경하는 "금상첨화" 문제에 대한 상대적으로 쉬운 솔루션의 문을 열어줍니다.

답변3

$ ls -1 /home/ | xargs -rI{} sudo cp testfile /home/{}/

설명하다

ls -1 /home/모든 사용자 선택'은 모든 사용자의 홈 디렉토리를 선택하고 하나씩 나열합니다.

xargs -rI{}표준 입력의 각 항목에 대해 다음 명령을 개별적으로 실행하여 {}항목의 텍스트(이 경우 사용자 디렉터리)를 바꿉니다.

cp testfile /home/{}/파일을 testfile사용자의 홈 디렉터리에 복사합니다.

관련 정보