【问题标题】:Bash script to recursively add a file to multiple directories用于递归地将文件添加到多个目录的 Bash 脚本
【发布时间】:2012-08-03 16:54:01
【问题描述】:

我在 /home/servers2 中有一堆目录(比如几千个),并且在 server2 的每个目录中都有一个名为 plugins Ex 的目录。 /home/servers2/MyServer/plugins

现在每个都有一个名为 AutoStopFinal.jar 的文件,我需要删除它,然后将 AutoStop1.3.001 从 /home/servers/template/plugins 复制到插件目录。 我想非破坏性地测试它,所以我尝试了这个:

echo " Script to copy a plugin to all server plugin directories"

for i in /home/servers2/*/plugins; do
    echo rm -f $i/AutoStopFinal.jar
    echo cp -f /home/servers/template/plugins/AutoStop1.3.001.jar "$i"
done

echo " completed script ..."

但只有将插件复制到所有服务器插件目录的脚本。大约 5 分钟后,我控制了 C'd。但是我没有从循环内部得到回声,有什么建议吗?

【问题讨论】:

  • 没有输出意味着甚至没有“将插件复制到所有服务器插件目录的脚本”和“完成的脚本......”
  • 我的错,它确实提供了将插件复制到所有插件目录的脚本
  • 可能路径扩展不匹配
  • 如果 /home/servers 下真的有几千个目录,那么您可能会有太多的目录无法容纳在一个命令行上。您必须使用find 命令。

标签: bash directory copy


【解决方案1】:

您可能可以像这样使用 find 为您执行此操作:

cd /home/servers2
find . -type d -name plugins -exec cp -f /home/servers/template/plugins/AutoStop1.3.001.jar {} \; -exec rm -f {}/AutoStopFinal.jar \;

【讨论】:

    【解决方案2】:

    此命令将删除文件:

    find ./servers2 -name AutoStopFinal.jar |xargs -n1 rm
    

    此命令会将新文件复制到位:

    find ./servers2 -name plugins |xargs -n1 cp ./servers/template/plugins/AutoStop1.3.001.jar
    

    【讨论】:

      猜你喜欢
      • 2016-07-22
      • 2014-05-09
      • 2012-07-31
      • 2011-12-04
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 2019-05-02
      • 2015-03-01
      相关资源
      最近更新 更多