我很难尝试限制路径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_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}
)