You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用find命令复制dist下多位置accdb目录内容并保留结构?

解决find命令执行多命令的错误及正确复制目录结构的方法

首先来说说你遇到的find: missing argument to '-exec'错误原因:在find的-exec选项中,你直接用了&&来连接两个命令,但find无法直接解析这种shell语法——它要求每个-exec的命令序列必须以\;或+结尾,而你的写法里,&&被当成了命令的一部分,导致find找不到结束标记,所以报错。

下面给你两种可行的解决方案:

方案一:用shell包裹多命令(延续你原来的思路)

你可以通过sh -c把mkdir和cp命令包裹起来,让find调用shell来执行这一组命令,这样就能正确解析&&了:

cd ~/dist
find . -name "accdb" -type d -exec sh -c 'mkdir -p ~/acc_trial/"$0" && cp -r "$0"/. ~/acc_trial/"$0"/' {} \;

这里的细节说明:

  • "$0"会被find替换为当前找到的accdb目录的相对路径(比如./subfolder/accdb)
  • 用"$0"/.而不是"$0"/*是为了复制所有内容(包括隐藏文件),如果不需要隐藏文件,用*也可以
  • mkdir -p是冗余但安全的写法,即使之前已经创建过目录也不会报错

方案二:用cp的--parents参数一步到位(更简洁)

其实你完全可以省略提前创建目录的步骤,直接用cp的--parents参数,它会自动保留源目录的相对结构并创建目标目录:

cd ~/dist
find . -name "accdb" -type d -exec cp -r --parents {} ~/acc_trial/ \;

这个命令会直接把每个找到的accdb目录(包括其内容和相对路径)复制到~/acc_trial下,比如源目录是./dir1/accdb,目标就会生成~/acc_trial/dir1/accdb,并且包含所有源目录里的内容,一步完成你要的操作。

内容的提问来源于stack exchange,提问作者user1410984

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:54:47