각 사용자의 모든 데스크탑 디렉토리에 파일을 복사하는 방법을 찾고 있습니다.
그것은 다음과 같습니다:
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 {}