【问题标题】:Synchronize executable files based on same path and filename基于相同的路径和文件名同步可执行文件
【发布时间】:2012-02-28 00:24:24
【问题描述】:

我有这个文件夹:

$HOME/folder_a -|
               - folder_b -|
                          - executable_1
                          - ordinary_file
               -folder_c  -|
                           - executable_2
                           - another_ordinary_file

我将 folder_a 的相同结构和文件放到另一个地方 ($external_driver/folder_a)

我的问题是什么:我的$HOME/folder_a 上的可执行文件 (chmod +x) 在我的 $external_driver/...中无法执行...

但我无法覆盖这些文件。它们的内容不同,但名称完全相同。

有没有人可以帮助我构建一个 shell 脚本来定位所有这些可执行文件,并使用相同的路径,将 chmod +x 应用于我的 $external_driver 上的相同文件名?

真的提前谢谢了!

编辑

关于答案的最终解决方案。

【问题讨论】:

  • 你必须表现出一点诚意,至少尝试自己编写脚本。我们不是来为你做你的工作的:)
  • 我说要帮助我,因为我什至不知道启动这个恶魔脚本。但我尝试这样做是对的。谢谢@Marvin

标签: shell synchronization executable


【解决方案1】:

一种方法...

cd $HOME/folder_a
find . -executable | sed 's/^./\/Path\/To\/Other\/Dir/'

检查输出。如果正确将其更改为

cd $HOME/folder_a
find . -executable | sed 's/^./\/Path\/To\/Other\/Dir/' | xargs chmod +x 

【讨论】:

  • 感谢@amit_g,我将在最终解决方案中使用 sed 和 xargs 这个技巧。已经更新了我的问题。谢谢!
【解决方案2】:

终于可以找到解决办法了:

for exec_file in $(find . -type f -executable); do 
    echo $exec_file | sed 's/^./..\/test2/' | xargs chmod +x; 
  fi; 
done

再次感谢@Marvin 和@amit_g!

【讨论】:

  • 您不必检查目录,但如果您愿意,可以在查找本身中过滤它。使用 find - 输入 f。
猜你喜欢
  • 2012-02-26
  • 2013-12-30
  • 1970-01-01
  • 2013-05-28
  • 2014-11-24
  • 2018-01-24
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
相关资源
最近更新 更多