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
그리고.tee
https://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
복사와 함께 사용하려면xargs
Mac 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
현재 작업 디렉토리 내의 모든 하위 디렉토리로 이동합니다.
을 「」를 개입시켜 합니다.
ls
합니다.「 「 」allFolders.txt
ls > allFolders.txt
하여 명령어로 합니다.
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
'programing' 카테고리의 다른 글
다른 목록에서 한 목록에서 항목 제거 (0) | 2023.04.14 |
---|---|
LINQ를 사용하여 리스트에서 요소 제거 (0) | 2023.04.14 |
부울 목록을 기준으로 목록 필터링 (0) | 2023.04.14 |
다운로드한 Xcode 시뮬레이터를 제거하는 방법 (0) | 2023.04.14 |
swift와 함께 isKindOfClass 사용 (0) | 2023.04.14 |