【问题标题】:Shell script help! Looping over directories under a directoryshell脚本求助!循环遍历目录下的目录
【发布时间】:2013-12-04 21:41:45
【问题描述】:

我想编写一个shell脚本,循环遍历一个目录下的所有目录,并在每次迭代时以目录名作为参数调用一个java程序。

所以我的父目录作为shell脚本的参数提供:例如:

. myShell.sh  /myFolder/myDirectory

/myFolder/myDirectory 下有 100 个目录。对于每个“directory_i”,我想运行:

java myProg directory_i

如果有人能给我提供一个可以工作的 shell 脚本就完美了!

【问题讨论】:

  • /myFolder/myDirectory 中的目录是否有子目录?如果是这样,基于“查找”的解决方案将会深入,这可能不是您想要的。如果没有,那么 find 工作正常。
  • 另外,使用 '. myShell.sh /myFolder/myDirectory' 是非正统的(没有错,只是可能不是你想要的)。它使当前 shell 读取并执行 myShell.sh 的内容 - 例如,脚本设置的任何变量都设置在您的 shell 中;任何函数现在都在你的 shell 中,等等。通常,你会使用“sh myShell.sh ...”或只是“myShell.sh ...
  • ...或./myShell.sh ...

标签: shell


【解决方案1】:

你可以使用find

myShell.sh 脚本可能看起来有点像这样,这是一个递归处理目标下的任何和所有子目录的版本。

DIR="$1"
find "$DIR" -type d -exec java myProg {} \;

可用的确切find 选项集取决于您的unix 种类。如果您不想要递归,您可以使用 Neeraj 指出的 -maxdepth,或者可能会使用 -prune,这开始有点难看:

find "$DIR" \( ! -name . -prune \) -type d  -exec java myProg {} \;

编辑添加修剪示例。

【讨论】:

  • 无论如何这个答案是完整的。
  • @Saobi - 它对我有用。不过,我没有你的 java 程序可供测试。
  • @Saobi - 你的评论很粗鲁,当人们花时间帮助你至少努力尝试他们的建议时
  • “请给我发电子邮件给我!” ...太糟糕了,我们不能对 cme​​ts 投反对票
  • @martinclayton(或其他任何人)如何修改它以在每个目录上执行多个 shell 脚本?还是我应该为此提出一个问题?
【解决方案2】:
#!/bin/bash -f
files=`ls $1`
for file in $files; do
        if [ -d $file ];then
          java myProg $file
          # java your_program_name directory_i
        fi
done

【讨论】:

  • 我打算在ls $1 反引号,但转义它不会起作用..:P
【解决方案3】:
#!/bin/sh
for i in */.; do
  echo "$i" aka "${i%/.}"
  : your_command
done

【讨论】:

    猜你喜欢
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 2021-02-08
    • 2011-05-11
    • 1970-01-01
    相关资源
    最近更新 更多