경로를 유지하는 여러 파일 교체

경로를 유지하는 여러 파일 교체

디렉토리가 있습니다그리고두번째. 각각은 다른 디렉토리를 포함합니다프로젝트.json안에. 오직프로젝트.json파일은 디렉터리에 유지되므로 디렉터리를 복사하여 붙여넣을 수 없습니다.

ㅏ:

./path/Item A/item.json
./path/Item B/item.json
...
./path/Item Z/item.json

두번째:

./new/Item A/item.json
./new/Item B/item.json
...
./new/Item Z/item.json

./path/모든 item.json 파일을 의 적절한 폴더 에 어떻게 복사해야 합니까 ./new?

내 솔루션:

디렉터리 가져오기

ls -l ./path | grep "^d" | cut -d' ' -f 16

그런 다음 결과를 다음과 같이 사용할 수 있습니다.

for i in `ls -l ./path | grep "^d" | cut -d' ' -f 16`; echo "Dir: $i"; done

그래서 내가 cp그들과 함께 할 수 있도록

for i in `ls -l ./path | grep "^d" | cut -d' ' -f 16`; cp "$i/item.json" "../new/$i/item.json" ; done

이 솔루션은 괜찮지만 더 우아한 방법이 있다고 확신합니다.

답변1

다음 줄이 도움이 될 것입니다.

$ find ./path/ -type f -exec bash -c 'cp $0 ${0/path/new}' {} \;

여기서 명령은 디렉터리의 모든 텍스트 파일을 find검색합니다 . ./path/파일이 발견되면 /new/단순히 문자열을 to로 바꾸는 작은 bash 스크립트를 호출하여 path파일을 대상 디렉토리에 복사합니다 new.

답변2

귀하의 솔루션은 훌륭합니다! 다른 옵션을 보고 싶다면 여기 제 조언이 있습니다 cp!

나는 당신이 "item.json" 파일만 복사하고 다른 것은 복사하지 않기를 원한다고 가정합니다.

cd path; cp --parents */item.json ../new

답변3

cpio(또는 tar, 그러나 IMHO는 속도가 느리고 cpio와 같은 옵션이 없습니다 )를 사용하십시오 -p! 권한, 날짜 등(필요한 경우)과 물론 디렉터리 구조도 유지합니다.

즉:cd path ; find . | cpio -pvmd ../new

관련 정보