查找并复制到多个子目录

时间:2014-06-18 15:22:15

标签: unix terminal find

您好我正在尝试查找并复制到用户文件中的多个首选项文件夹只是一个plist但出现错误。我正在跳楼,有人可以帮我指出或者帮助我理解我做错了什么。

find . -type d -name 'Preferences' -maxdepth 3 -exec cp -r {} /Users/ladmin/Desktop/source.plist *Library/Preferences \;

正好运行

find . -type d -name 'Preferences' -maxdepth 3

打印出我要复制到username/Library/Preferences

的内容

然后我想将plist复制到每个用户的首选项文件夹中。

我希望这对人们阅读来说并不复杂。

谢谢Kris

1 个答案:

答案 0 :(得分:0)

不完全确定为什么会导致错误,尽管它确实有几个问题。

  • find是递归的,cp -r是递归的,它们都遍历同一棵树。您可以将-prune测试添加到find以阻止其降序找到目录
  • 不确定这是否会对此产生任何影响,但find通常喜欢options(即-maxdepth)。
  • *Library/Preferences如果此扩展到多个路径,则其中一个路径将被复制到最后一个路径中。

但是,我认为主要的问题是你试图将一堆名为Preferences的目录复制到一个目录中,因此实际上只会复制其中一个,其余的将被覆盖。

find -maxdepth 3 -type d -name 'Preferences' -prune -exec echo cp -ivr {} /Users/ladmin/Desktop/source.plist username/Library/Preferences +

这解决了所有第一个问题,但是从问题中不清楚当具有该名称的目录已经存在时会发生什么。 -iv会提示您是否要在发生冲突时覆盖并添加一些详细程度。对于可以采用多个文件/目录名称(如+)的命令,find可以加快cp的执行速度。