【问题标题】:Run shell script for every file in directory为目录中的每个文件运行 shell 脚本
【发布时间】:2012-05-02 20:12:51
【问题描述】:

我在一个名为 YYYY_MM_DD 的目录中有一堆文件

-rw-r--r-- 1 root root 480K Apr 21 13:17 2012_04_05
-rw-r--r-- 1 root root 483K Apr 21 13:17 2012_04_06
-rw-r--r-- 1 root root 484K Apr 21 13:17 2012_04_07
-rw-r--r-- 1 root root 480K Apr 21 13:17 2012_04_08
-rw-r--r-- 1 root root 344K Apr 21 13:17 2012_04_09
-rw-r--r-- 1 root root  66K Apr 21 13:17 2012_04_10
-rw-r--r-- 1 root root 461K Apr 21 13:17 2012_04_11
-rw-r--r-- 1 root root 475K Apr 21 15:09 2012_04_17
-rw-r--r-- 1 root root 480K Apr 21 15:10 2012_04_18
-rw-r--r-- 1 root root 474K Apr 21 15:10 2012_04_19
-rw-r--r-- 1 root root 474K Apr 21 15:10 2012_04_20

我有一个 shell 脚本,它接受一个文件作为参数并根据文件中的数据计算数字,我这样调用脚本

sh Calculate.sh MyFile

我想为这个目录中的每个文件运行这个 shell 脚本。

我该怎么做呢,xargs ??

【问题讨论】:

  • find 命令可能是一个好的开始。这里有一些关于它的资源:@​​987654321@ 和 mywiki.wooledge.org/UsingFind(变得更加复杂,但值得一看)。

标签: linux bash unix find xargs


【解决方案1】:

shell 中的一个简单的 for 循环:

for file in *; do sh Calculate.sh "$file"; done

【讨论】:

  • 如果Calculate.sh在同一个目录下,这不会自己运行吗?
  • 是的。为了避免这种情况,使用 bash 遍历所有 not 名为 Calculate.sh 的文件:shopt extglob nullglob; for file in !(Calculate.sh)
【解决方案2】:
./Calculate.sh 2012_04_{05..20}

【讨论】:

    【解决方案3】:

    find . -maxdepth 1 -type f | xargs -n 1 -I % Calculate.sh %

    【讨论】:

      【解决方案4】:

      你试过find命令执行吗?

      我的示例将回显文件,但您可以使用文件名作为参数调用 shell 脚本

      find . -maxdepth 1 -type f -exec echo {} \;
      

      【讨论】:

      • 这很酷,但我如何将它们按顺序传递给我的Calculate.sh 脚本???
      • 好的..在这种情况下,您需要在调用脚本之前整理所有文件。试试这样的find . -maxdepth 1 -type f | sort | xargs -I '{}' Calculate.sh '{}'
      • 我了解 xargs 的命令,我了解 sort 将数据通过管道传输到 xargs,-I 开关是什么,为什么有两个 '{}'?非常感谢。
      • 当使用-I 时,您可以指定一个替换字符串。 '{}' on find 命令代表当前返回的文件名,但在xargs 上它没有特殊含义,因为您可以使用find . -maxdepth 1 -type f | sort | xargs -I 'recei_param' echo 'recei_param' 运行脚本并且输出将是相同的。您可以在man xargs查看更多详细信息
      猜你喜欢
      • 1970-01-01
      • 2011-03-21
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多