![如何在find [...] -exec cp {} dest_dir \; 中选择路径命令?](https://linux22.com/image/156010/%E5%A6%82%E4%BD%95%E5%9C%A8find%20%5B...%5D%20-exec%20cp%20%7B%7D%20dest_dir%20%5C%3B%20%E4%B8%AD%E9%80%89%E6%8B%A9%E8%B7%AF%E5%BE%84%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我很难尝试限制路径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}
)