상위 디렉터리를 잃지 않고 하위 디렉터리에 있는 동일한 이름을 가진 여러 파일을 다른 디렉터리로 복사하는 방법은 무엇입니까?

상위 디렉터리를 잃지 않고 하위 디렉터리에 있는 동일한 이름을 가진 여러 파일을 다른 디렉터리로 복사하는 방법은 무엇입니까?

다른 Android 프로젝트의 이미지 파일을 현재 프로젝트로 복사할 때 몇 가지 불편함을 겪고 있습니다.

nice_little_icon.pngProject1 디렉토리 아래의 각 디렉토리 drawable-ldpi, , 및 drawable-mdpi파일을 호출 한다고 가정합니다 .drawable-hdpidrawable-xhdpidrawable-xxhdpires

res이제 단일 Linux/Unix 명령을 사용하여 이 파일을 project2의 디렉터리에 어떻게 복사할 수 있습니까 ?

그래서 내 최종 결과는 다음과 같습니다

Project1/../res/drawable-ldpi/nice_little_icon.png -> Project2/../res/drawable-ldpi/nice_little_icon.png
Project1/../res/drawable-mdpi/nice_little_icon.png -> Project2/../res/drawable-mdpi/nice_little_icon.png
Project1/../res/drawable-hdpi/nice_little_icon.png -> Project2/../res/drawable-mdpi/nice_little_icon.png
Project1/../res/drawable-xhdpi/nice_little_icon.png -> Project2/../res/drawable-xhdpi/nice_little_icon.png
Project1/../res/drawable-xxhdpi/nice_little_icon.png -> Project2/../res/drawable-xxhdpi/nice_little_icon.png

답변1

당신은 그것을 사용할 수 있습니다 rsync.

rsync -avzh -n --include='*/' --include='*nice_little_icon.png' --exclude='*' Project1/../res/ Project2/../res/

이것은 호출된 파일 만 nice_little_icon.png에서 으로 복사하며 , 파일의 상위 디렉터리( , 등)가 없으면 그 아래에 생성됩니다 .Project1/../res/*Project2/../res/drawable-ldpidrawable-ldpiProject2/../res/

rsync명령을 설명하십시오 .

  • -avzh: -a기본적으로 "타임스탬프, 권한 및 기타 몇 가지 사항을 반복하고 보존합니다"를 의미 -v하고 장황함을 의미하며 -z전송 시 파일을 압축한다는 의미(실제로는 필요하지 않지만 어쨌든 사용하고 싶습니다) -h는 사람이 읽을 수 있는 읽기 모드에서 인쇄를 의미합니다. .
  • -n: 시운전을 나타냅니다. 따라서 이 명령을 실행해도 아무 일도 일어나지 않습니다. 실제로 명령이 실행되도록 하려면 이를 제거해야 합니다.
  • --include='*/' --include='*nice_little_icon.png' --exclude='*'rsync: 기본적으로 다음으로 끝나는 파일만 복사하고 nice_little_icon.png나머지는 모두 제외하라는 의미입니다.
  • Project1/../res/: 소스 디렉토리. /마지막으로매우중요한 것은 "무엇이든 복사하다"는 뜻입니다.아래에 res/'. 디렉토리를 삭제하면 /실제 디렉토리가 대상에 복사되는데 res이는 원하는 것이 아닙니다.
  • Project2/../res/: 대상 디렉토리.

위 명령을 실행하면 수행할 작업(즉, 복사할 디렉터리와 파일)이 표시됩니다.

./
드로어블-hdpi/
drawable-hdpi/nice_little_icon.png
드로어블-mdpi/
drawable-mdpi/nice_little_icon.png
...

이는 다음과 같아야 합니다(즉, 상위 디렉토리, 파일만 nice_little_icon.png). 좋아 보인다면-n실제로 작업을 수행하고 파일을 복사하도록 명령에서 제거하십시오..

답변2

당신은 그것을 사용할 수 있습니다paxtar명령( 및 에 대한 표준화된 대체 cpio) 이 명령은 모든 POSIX 호환 시스템에 있지만 일부 Linux 배포판에서는 기본 설치에서 이 명령이 생략되어 있습니다. pax대상 디렉터리 아래의 모든 경로를 복사합니다.

pax -rw -pe drawable-*/nice_little_icon.png ../../Project2/res/

-s이 옵션을 사용하면 셸에서 와일드카드를 사용하는 대신 특정 파일을 무시할 수 있습니다.

pax -rw -pe -'s!^drawable-[^/]*/nice_little_icon\.png$!&!' -'s!.*/.*!!' drawable-* ../../Project2/res/

관련 정보