모든 사용자의 데스크탑에 동일한 파일을 복사합니다.

모든 사용자의 데스크탑에 동일한 파일을 복사합니다.

각 사용자의 모든 데스크탑 디렉토리에 파일을 복사하는 방법을 찾고 있습니다.

그것은 다음과 같습니다:

cp myfile /home/*/Desktop/

모든 홈 디렉토리에 파일을 복사하는 방법을 찾았 xargs지만 하위 디렉토리에서는 실패합니다.

답변1

코드는 다음으로 확장됩니다.

cp myfile /home/user1/Desktop/ /home/user2/Desktop/ /home/user3/Desktop/ /home/user4/Desktop/ ... /home/userN/Desktop/

출신인 cp:

SOURCE를 DEST로 복사하거나 여러 SOURCE를 DIRECTORY로 복사하세요.

즉, "myfile /home/user1/Desktop/ /home/user2/Desktop/ /home/user3/Desktop/ /home/user4/Desktop/ ..."을 /home/userN/Desktop /에 복사하려고 시도합니다.

"myfile"을 제외한 다른 모든 디렉터리는... 오류가 발생합니다.

이 시도,

UserS=($(awk -F':' '{ if ( $3 >= 500 ) print $1 }' /etc/passwd))
for i in ${UserS[@]}
do
    [ -d /home/"$i"/Desktop ] && cp myfile /home/"$i"/Desktop
done

답변2

대상 이름은 하나만 필요 하므로 cp이를 루프로 만들고 복사본 파일을 개별적으로 호출해야 합니다.

for destdir in /home/*/Desktop/; do
    cp myfile "$destdir"
done

xargs제안한 대로 여기를 사용하면 효과가 있을 수 있지만 번거로울 수 있습니다.

printf '%s\n' /home/*/Desktop/ | xargs -I {} cp myfile {}

/home이는 이름에 개행 문자가 없는 하위 디렉터리에 의존합니다 (그러나 제가 아는 어떤 Unix도 사용자 이름에 개행 문자를 허용하지 않습니다).

상상할 수 있듯이 파일 소유자를 해당 디렉토리의 소유자로 변경하고 싶을 수도 있습니다 Desktop.

chown다음과 같이 GNU(coreutils의)를 사용하여 이 작업을 편리하게 수행 할 수 있습니다 .

for destdir in /home/*/Desktop/; do
    cp myfile "$destdir" &&
    chown --reference="$destdir" "$destdir/myfile"
done

행위저것그리고 xargs:

printf '%s\n' /home/*/Desktop/ | xargs -I {} sh -c 'cp myfile "$1" && chown --reference="$1" "$1/myfile"' sh {}

관련 정보