"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/ \;)