2012-02-28 42 views
1

上同步的可执行文件,我有这个文件夹:基于相同的路径和文件名

$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上相同的文件名?

真的在此先感谢!

编辑:在回答

最终的解决方案。

+0

你必须表现出一点诚意,至少_attempt_自己编写脚本。我们不是在这里为你做你的工作:) – 2012-02-28 00:28:34

+0

我说要帮助我,因为我不知道甚至开始这个恶魔脚本。但我正确地试图去做。谢谢@Marvin – 2012-02-28 00:31:31

回答

2

一种方式来做到这一点...

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

检查输出。再次

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

感谢,@Marvin和@amit_g:如果是正确的改变

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

谢谢@amit_g,我将在最终解决方案中使用sed和xargs这个技巧。已经更新了我的问题。谢谢! – 2012-02-28 00:42:41

1

终于可以找到一个解决方案!

+0

您不必检查目录,但如果您确实想要,可以在查找本身中对其进行过滤。使用find - type f。 – 2012-02-28 01:12:10

+0

谢谢,我更新了它。 – 2012-02-28 02:06:59