如何在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_PATHDEST_DIR是在 sh 文件的开头设置的。

答案1

如果${DEST_DIR}是绝对路径,一种方法可能是cd在当前目录上${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}

相关内容