find[...] -exec cp{}dest_dir\; からパスコマンドを選択するには?

find[...] -exec cp{}dest_dir\; からパスコマンドを選択するには?

ルートを制限するのに苦労していますfind

私はこのコマンドを持っていますfind ${DIR_PATH} -type f -name ".py" -exec cp --parent {} ${DEST_DIR} \;

これは私に次のような結果を与えます:

${DIR_PATH}/a/main.py
${DIR_PATH}/a/b/resources.py
${DIR_PATH}/c/__init__.py
${DIR_PATH}/c/main.py

${DIR_PATH}このディレクトリを見たとき、私は確かに知っていました。どうやって入手できますか?

a/main.py
a/b/resources.py
c/__init__.py
c/main.py

目標は、ターゲットディレクトリに次のコンテンツをインポートすることです。

${DEST_DIR}/a/main.py
${DEST_DIR}/a/b/resources.py
${DEST_DIR}/c/__init__.py
${DEST_DIR}/c/main.py

しかし、私はこれを持っています:

${DEST_DIR}/${DIR_PATH}/a/main.py
${DEST_DIR}/${DIR_PATH}/a/b/resources.py
${DEST_DIR}/${DIR_PATH}/c/__init__.py
${DEST_DIR}/${DIR_PATH}/c/main.py

注:DIR_PATHとは、DEST_DIRshファイルの先頭に設定されています。

答え1

${DEST_DIR}絶対パスの場合は、以前にcd現在のディレクトリで実行する方法が1つあります${DIR_PATH}findこれにより、パスはfindすべて相対的になります。

cd "${DIR_PATH}"
find . -type f -name ".py" -exec cp --parent {} "${DEST_DIR}" \;

DEST_DIR絶対パスではない場合は、$PWD前にfromプレフィックスを追加してくださいcd。)

あなたが使用できるrsyncそれはまるで:

rsync -a --prune-empty-dirs --include "*/"  --include="*.py" --exclude="*"  "${DIR_PATH}/" "${DEST_DIR}" 

(後ろにスラッシュがあることに注意してください${DIR_PATH}

関連情報