한 디렉터리의 모든 파일을 동일한 상위 디렉터리 아래의 모든 디렉터리에 복사합니다.

한 디렉터리의 모든 파일을 동일한 상위 디렉터리 아래의 모든 디렉터리에 복사합니다.

상위 디렉토리 /home/test가 있고 해당 디렉토리 내에 여러 디렉토리가 있습니다. 이름은 server{1..10}입니다. 여기서 server3에는 원격 서버에서 복사한 여러 파일이 있습니다. cp를 사용해 보았지만 작동하지 않습니다. server3 디렉토리의 모든 파일 또는 하나의 파일을 /home/test 아래의 나머지 서버 디렉토리로 복사하는 방법이 있습니까?

답변1

원하는 것이 무엇인지 이해한다면 가장 간단한 방법은 for 루프입니다.

myList="server1 server2 server4 server5 server6 server7 server8 server9 server10"
for myDir in $myList ; do cp server3/* $myDir/ ; done

답변2

가장 간단한 방법은 루프에서 이 작업을 수행하는 것입니다.

for i in ./server*; do cp ./server3/testfile* "${i}"; done

server3디렉터리의 내용을 현재 경로의 모든 디렉터리에 복사합니다 . 또한 파일을 동일한 디렉터리에 복사하려고 시도하지만 동일한 파일이라는 것만 인쇄하고 계속 진행합니다.

편집하다: 불쾌한 오류 메시지를 방지하려면 보다 구체적인 와일드카드 문자를 사용하여 for 루프를 강화할 수 있습니다. 예를 들어 건너뛰려면 server3다음을 사용하세요.server[1-24-9]

답변3

cp여러 소스를 처리할 수 있지만 여러 대상은 처리할 수 없습니다.

예를 들어, 이를 사용하여 , 및 에 echo dir1 dir2 dir3 | xargs -n 1 cp file1복사 할 수 있습니다 .file1dir1dir2dir3

또 다른 수정 사항은 echo dir1 dir2 dir3 | xargs -n 1 cp /home/test/server3/*지정된 디렉터리의 모든 파일을 echo 디렉터리에 복사하는 것입니다.

약간 더 짧은 추가 솔루션(디렉토리 이름을 입력할 필요 없음)은 다음과 같습니다.

ls -1 | grep -v server3 | xargs -n 1 cp server3/*

마지막으로,복사

첫 번째 솔루션의 예 추가:

# creating sample dir structure
[shadowe@shadow Desktop]$ mkdir server1
[shadowe@shadow Desktop]$ mkdir server2
[shadowe@shadow Desktop]$ mkdir server3
[shadowe@shadow Desktop]$ touch server3/test.one
[shadowe@shadow Desktop]$ touch server3/test.two
[shadowe@shadow Desktop]$ ls -R
./server1:
./server2:
./server3:
test.one  test.two

# executing solution
$ echo /home/shadowe/Desktop/server2/ /home/shadowe/Desktop/server1/ | xargs -n 1 cp /home/shadowe/Desktop/server3/*

# verifying solution
[shadowe@shadow Desktop]$ ls -R
./server1:
test.one  test.two
./server2:
test.one  test.two
./server3:
test.one  test.two

두 번째 솔루션의 예 추가:

# showing directories structure and initial state
$ ls -R
server1:
server2:
server3:
test.one  test.two
server4:
server5:
server6:

# executing command
$ ls -1 | grep -v server3 | xargs -n 1 cp server3/*

# checking results
$ ls -R
./server1:
test.one  test.two
./server2:
test.one  test.two
./server3:
test.one  test.two
./server4:
test.one  test.two
./server5:
test.one  test.two
./server6:
test.one  test.two

표시된 대로 두 명령 모두 모든 파일을 server3다른 디렉터리에 복사하므로 선호도와 사용 사례의 문제입니다.

관련 정보