programing

gnu cp 명령을 사용하여 파일을 여러 디렉토리에 복사하는 방법

subpage 2023. 4. 14. 21:42
반응형

gnu cp 명령을 사용하여 파일을 여러 디렉토리에 복사하는 방법

cp 명령어를 사용하여 하나의 파일을 여러 디렉토리에 복사할 수 있습니까?

다음을 시도했지만 작동하지 않았습니다.

cp file1 /foo/ /bar/
cp file1 {/foo/,/bar}

for 루프 또는 find를 사용하는 것이 가능하다는 것을 알고 있습니다.하지만 gnu cp 명령어를 사용할 수 있을까요?

이 작업을 수행할 수 없습니다.cp단, 조합할 수 있습니다.cp와 함께xargs:

echo dir1 dir2 dir3 | xargs -n 1 cp file1

카피하다file1로.dir1,dir2,그리고.dir3.xargs전화할 것이다cp이 작업을 수행하려면 man 페이지를 참조하십시오.xargs자세한 것은, 을 참조해 주세요.

아니요.cp는, 복수의 송신원을 카피할 수 있습니다만, 1 개의 행선지에만 카피합니다.호출을 준비해야 합니다.cp루프나 기타 툴을 사용하여 목적지에 따라 1회씩 여러 번 실행할 수 있습니다.

와일드카드도 Roberts 코드와 연동됩니다.

echo ./fs*/* | xargs -n 1 cp test 

나는 사용할 것이다.cat그리고.teehttps://superuser.com/questions/32630/parallel-file-copy-from-single-source-to-multiple-targets에서 본 답변에 근거해cp.

예를 들어 다음과 같습니다.

cat inputfile | tee outfile1 outfile2 > /dev/null

제가 보기엔 다음을 사용할 수 있습니다.

ls | xargs -n 1 cp -i file.dat

-i의 선택사항cp명령어는 현재 디렉토리의 파일을 다음 명령어로 덮어쓸지 여부를 묻는 메시지를 표시합니다.file.dat완전 자동 솔루션은 아니지만, 저는 잘 해결되었습니다.

이러한 답변은 모두 명백한 답변보다 더 복잡해 보입니다.

for i in /foo /bar; do cp "$file1" "$i"; done

ls -db di*/subdir | xargs -n 1 cp File

-b디렉토리 이름에 공백이 있는 경우, 그렇지 않으면 xargs에 의해 다른 항목으로 분해됩니다. 에코 버전에 문제가 있었습니다.

cp 그 자체는 사용하지 않지만...

이것은, SD카드의 많은 Gopro 영상을, 3대의 USB 드라이브에 카피하는 경우에 생각해 낸 것입니다.데이터를 한 번만 읽고 싶었어요.왜냐하면 시간이 오래 걸려서.그리고 난 재귀적이길 바랬어요

$ tar cf - src | tee >( cd dest1 ; tar xf - ) >( cd dest2 ; tar xf - ) | ( cd dest3 ; tar xf - )

(더 많은 출력을 원할 경우 이러한 >() 섹션을 추가할 수 있습니다).

벤치마킹은 하지 않았지만 cp-in-a-loop(또는 다수의 병렬 cp 호출)보다 훨씬 빠릅니다.

분기된 명령어를 사용하지 않고 실행할 경우:

tee <inputfile file2 file3 file4 ... >/dev/null

복사와 함께 사용하려면xargsMac OS에서 와일드카드를 사용하는 디렉토리로 이동하려면 디렉토리 이름에 공백이 있는 상태에서 작동한 유일한 솔루션은 다음과 같습니다.

find ./fs*/* -type d -print0 | xargs -0 -n 1 cp test 

어디에test복사할 파일입니다.
그리고../fs*/*카피처 디렉토리

문제는 xargs가 공간을 새로운 인수, 즉 딜리미터 문자를 변경하기 위한 솔루션으로 간주한다는 것입니다.-d ★★★★★★★★★★★★★★★★★」-E유감스럽게도 Mac OS에서는 정상적으로 동작하지 않습니다.

기본적으로 xargs 응답과 동일하지만 병렬 실행을 원하는 경우:

parallel -q cp file1 ::: /foo/ /bar/

예를 들어 file1을 현재 폴더(재귀 포함)의 모든 서브디렉토리에 카피하려면 , 다음의 순서를 실행합니다.

parallel -q cp file1 ::: `find -mindepth 1 -type d`

주의: 이것은, 각 타겟 디렉토리가 개별의 디스크인 경우 등, 매우 특정의 사용 예에 대해서, 현저한 속도의 향상을 가져오는 것일 가능성이 있습니다.

또한 기능적으로는 xargs의 '-P' 인수와 유사합니다.

아니, 할 수 없어.

저는 이 기능을 사용할 수 있다는 것을 여러 번 알게 되었기 때문에 이 기능을 수행하기 위한 도구를 직접 만들었습니다.

http://github.com/ddavison/branch

한 - 플플 - - -
branch myfile dir1 dir2 dir3

ls -d */ | xargs -iA cp file.txt A

「」를 .fileName.txt현재 작업 디렉토리 내의 모든 하위 디렉토리로 이동합니다.

  1. 을 「」를 개입시켜 합니다.ls 합니다.「 「 」allFolders.txt

    ls > allFolders.txt
    
  2. 하여 명령어로 합니다.xargs.

    cat allFolders.txt | xargs -n 1 cp fileName.txt
    

또 다른 방법은 다음과 같이 cat and tee를 사용하는 것입니다.

cat <source file> | tee <destination file 1> | tee <destination file 2> [...] > <last destination file>

작업이 여러 프로세스(대상마다 하나씩)로 분할되고 하드 드라이브가 플래터의 다른 부분에 여러 파일을 한 번에 쓰기 때문에 이 방법은 매우 비효율적이라고 생각합니다.그러나 여러 드라이브에 파일을 쓰려면 이 방법이 매우 효율적입니다(모든 복사본이 동시에 발생할 수 있으므로).

bash 스크립트 사용

DESTINATIONPATH[0]="xxx/yyy"
DESTINATIONPATH[1]="aaa/bbb"
                ..
DESTINATIONPATH[5]="MainLine/USER"
NumberOfDestinations=6

for (( i=0; i<NumberOfDestinations; i++))
    do
        cp  SourcePath/fileName.ext ${DESTINATIONPATH[$i]}

    done
exit

여러 폴더를 여러 폴더에 복사하려면 다음과 같이 하십시오.

echo dir1 dir2 dir3 | xargs - n 1 cp - r / path / subourdir / { subdir1, subdir2, subdir3}

하는 경우 - " "의 하위 와 같습니다.path/to - " " " " 를 사용합니다.find와와와 cp음음음같 뭇매하다

find ./path/to/* -type d -exec cp [file name] {} \;

바로 그겁니다.

파일을 복사할 폴더를 지정해야 할 경우 find를 하나 이상의 greps와 결합할 수 있습니다.예를 들어, 임의의 서브폴더에서 favicon.ico가 발생한 경우 이를 대체할 수 있습니다.

find . | grep favicon\.ico | xargs -n 1 cp -f /root/favicon.ico

은, 서브 자세히 는, 「 」 「 」 「 」 「 」 「 」 「 」★★★★★★★★★★★★★★★★★★★★★★★,-maxdepth파라미터를 지정합니다.

find . -mindepth 1 -maxdepth 1 -type d| xargs -n 1 cp -i index.html

모든 디렉토리에 복사하지 않을 경우 관심 없는 디렉토리를 필터링할 수 있습니다. with starting starting starting starting starting starting starting starting starting starting starting 로 복사a

find . -mindepth 1 -maxdepth 1 -type d| grep \/a |xargs -n 1 cp -i index.html

임의의 디렉토리 세트 또는 다른 디렉토리에 카피하는 경우는, Robert Gamble 의 제안이 필요합니다.

하는 것을 : into음음 a a a i i 、 i 、 음 、 음 、 i 、 i i 。cp file1 /foo/; cp file1 /bar/; cp file1 /foo2/; cp file1 /bar2/또, 디렉토리를 다른 디렉토리에 카피합니다.cp -r dir1/ /foo/; cp -r dir1/ /bar/; cp -r dir1/ /foo2/; cp -r dir1/ /bar2/

여러 개의 명령어를 발행하는 것과 같은 것은 알지만, 한 줄을 입력하고 잠시 자리를 비우고 싶을 때는 효과가 있습니다.

예를 들어, 대상 폴더의 상위 디렉토리에 있는 경우 다음을 수행할 수 있습니다.

i의 경우 $(ls); cp sourcefile $i; 완료

언급URL : https://stackoverflow.com/questions/195655/how-to-copy-a-file-to-multiple-directories-using-the-gnu-cp-command

반응형