Programing

Bash : 이름이 지정된 파일을 재귀 적으로 복사하여 폴더 구조를 유지합니다.

lottogame 2020. 8. 26. 08:20
반응형

Bash : 이름이 지정된 파일을 재귀 적으로 복사하여 폴더 구조를 유지합니다.


나는 바라고 있었다 :

cp -R src/prog.js images/icon.jpg /tmp/package

대상 디렉토리에 대칭 구조를 생성합니다.

/tmp
|
+-- package
    |
    +-- src
    |   |
    |   +-- prog.js
    |
    +-- images
        |
        +-- icon.jpg

대신 두 파일 모두 / tmp / package에 복사됩니다. 플랫 카피. (이것은 OSX에 있습니다).

와일드 카드 (예 : src / *. js)로 지정된 파일을 포함하여 모든 파일을 대상 디렉토리 내의 적절한 위치에 복사하는 데 사용할 수있는 간단한 bash 함수가 있습니까? "각 파일마다 실행 mkdir -p $(dirname "$file"); cp "$file" $(dirname "$file")"과 비슷하지만 단일 명령 일 수도 있습니다.

이것은 불가능하다는 것을 암시하는 관련 스레드입니다. 저자의 솔루션은 나에게 그다지 유용하지 않습니다. 와일드 카드 여부에 관계없이 파일 목록을 제공하고 모든 파일을 대상 디렉토리에 복사하기를 원하기 때문입니다. IIRC MS-DOS xcopy가이 작업을 수행하지만 cp에 해당하는 것은없는 것 같습니다.


--parents 옵션을 사용해 보셨습니까? OS X이 지원하는지는 모르겠지만 Linux에서 작동합니다.

cp --parents src/prog.js images/icon.jpg /tmp/package

OS X에서 작동하지 않으면 시도해보십시오.

rsync -R src/prog.js images/icon.jpg /tmp/package

aif 제안대로.


일방 통행:

tar cf - <files> | (cd /dest; tar xf -)

또는 구식 인 경우 cpio를 사용합니다.

cd /source;
find . -print | cpio -pvdmB /target

분명히 파일 목록을 마음의 내용으로 필터링 할 수 있습니다.

'-p'옵션은 'pass-through'모드를위한 것입니다 (입력의 경우 '-i'또는 출력의 경우 '-o'에 대해). '-v'는 장황합니다 (파일이 처리되는대로 나열). '-m'은 수정 시간을 보존합니다. '-B'는 '빅 블록'사용을 의미합니다 (빅 블록은 512 바이트 대신 5120 바이트). 요즘에는 효과가 없을 가능성이 있습니다.


rsync의 -R 옵션 은 예상대로 수행합니다. 매우 기능이 풍부한 파일 복사기입니다. 예를 들면 :

$ rsync -Rv src/prog.js images/icon.jpg /tmp/package/
images/
images/icon.jpg
src/
src/prog.js

sent 197 bytes  received 76 bytes  546.00 bytes/sec
total size is 0  speedup is 0.00

샘플 결과 :

$ find /tmp/package
/tmp/package
/tmp/package/images
/tmp/package/images/icon.jpg
/tmp/package/src
/tmp/package/src/prog.js

rsync of course! tutorial here. and here

Or unison


Try...

for f in src/*.js; do cp $f /tmp/package/$f; done

so for what you were doing originally...

for f in `echo "src/prog.js images/icon.jpg"`; do cp $f /tmp/package/$f; done

or

v="src/prog.js images/icon.jpg"; for f in $v; do cp $f /tmp/package/$f; done

참고URL : https://stackoverflow.com/questions/1650164/bash-copy-named-files-recursively-preserving-folder-structure

반응형