如何脚本从父目录转到最深的文件夹目录来执行命令?

时间:2016-04-27 00:49:01

标签: linux bash shell

我正在尝试通过ovftool自动将.vmx转换为.ova,并且这些.vmx文件是从ghettoVCB生成的。所以我正在编写一个脚本来实现转换自动化。

我的问题是如何编写一个shell脚本,该脚本遍历parent_directory中的每个目录并在每个目录中执行命令?或者可以将所有内容从最深的文件夹移动到parent_directory? (将这些文件从最深的文件夹移动到parent_directory可能需要很长时间才能使用此解决方案。)

目录结构如下: parent_directory /自动化/自动化2016-04-18_19-08-32 / automation.vmx parent_directory /公牛/公牛-2016-04-18_18-28-57 / bulls.vmx

这是另一种结构布局

parent_directory

  • 自动化
    • 自动化2016-04-18_19-08-32
      • automation.vmx
  • 多头
    • 公牛-2016-04-18_18-28-57
      • bulls.vmx

parent_directory中子文件夹的名称不遵循模式。可以是任何名字。 文件夹“automation-2016-04-18_19-08-32”是子文件夹的名称+日期+时间。

1 个答案:

答案 0 :(得分:2)

方法1

  

将所有内容从最深的文件夹移动到parent_directory

此命令将搜索当前目录的子目录,查找所有.vmx个文件,并将它们移动到当前目录:

find . -type f -name '*.vmx' -exec mv {} . \;

方法2

  

编写一个shell脚本,该脚本遍历parent_directory中的每个目录并在每个目录中执行命令

以下命令将搜索当前目录的每个子目录并在其中执行command

find . -type d -execdir command \;

如果要在包含command个文件的每个目录中运行.vmx并将.vmx个文件的名称作为参数提供给command,请运行:

find . -type f -name '*.vmx' -execdir command {} +

或者,假设我们要为找到的每个.vmx文件运行一次命令:

find . -type f -name '*.vmx' -execdir command {} \;