find를 사용하여 파일을 복사할 때 최종 디렉터리 구조를 유지하는 방법

find를 사용하여 파일을 복사할 때 최종 디렉터리 구조를 유지하는 방법

"parents" 명령을 사용하면 작동하지만 전체 디렉터리 구조가 복사되므로 마지막 디렉터리만 유지하면 됩니다.

find /tmp/data/ -type f -name "*.txt" -exec cp --parents {} /u01/ABC/ \;

내가 얻는 결과는 다음과 같습니다.

/u01/ABC/tmp/data/a/1.txt
/u01/ABC/tmp/data/b/1.txt
/u01/ABC/tmp/data/c/1.txt

필요한 출력은 다음과 같습니다.

/u01/ABC/a/1.txt
/u01/ABC/b/1.txt
/u01/ABC/c/1.txt

답변1

sh -c명령 에 사용하면 더 많은 제어권을 갖게 됩니다 find -exec. 예를 들어 다음과 같이 할 수 있습니다.

find ... -exec sh -c '
    target="/u01/ABC/$(basename "$(dirname "$1")")"
    mkdir -p "$target" && cp --backup "$1" "$target"
' find-sh {} \;

답변2

cd대상 디렉터리로 이동하여 find거기에서 명령을 실행할 수 있습니다 .

cd /tmp/data; find . -type f -name "*.txt" -exec cp --parents {} /u01/ABC/ \;

원래 작업 디렉터리로 돌아가야 하는 경우 cd -나중에 명령을 실행하거나 하위 셸에서 실행할 수 있습니다.

(cd /tmp/data; find . -type f -name "*.txt" -exec cp --parents {} /u01/ABC/ \;)

관련 정보