在文件夹bash中以字符串开头的所有文件名上调用脚本

时间:2014-11-08 01:08:03

标签: bash

我想在一个文件夹中执行操作的一组文件,我希望写一个scipt。每个文件都以mazeFilex开头,其中x可能与任何数字不同,是否有快速简便的方法对每个文件执行操作?例如我会做的

cat mazeFile0.txt | ./maze_ppm 5 | convert - maze0.jpg

如何知道文件将始终以mazeFile开头?

,如何选择每个文件

3 个答案:

答案 0 :(得分:2)

for fname in mazeFile*
do
    base=${fname%.txt}
    base=${base#mazeFile}
    ./maze_ppm 5 <"$fname" | convert - "maze${base}.jpg"
done

注释

  • for fname in mazeFile*; do

    此代码启动循环。以这种方式编写,对于所有文件名都是安全的,无论它们的名称中是否有空格,制表符或其他内容。

  • base=${fname%.txt}; base=${base#mazeFile}

    这会删除mazeFile前缀和.txt后缀,只留下我们将用于输出文件的基本名称。

  • ./maze_ppm 5 <"$fname" | convert - "maze${base}.jpg"

    输出文件名使用base构造。另请注意,cat是不必要的,已在此处删除。

答案 1 :(得分:1)

for i in mazeFile*.txt ; do ./maze_ppm 5 <$i | convert - `basename maze${i:8} .txt`.jpg ; done

答案 2 :(得分:0)

您可以使用for循环遍历所有文件名。

#!/bin/bash
for fn in mazeFile*; do
    echo "the next file is $fn"
    # do something with file $fn
done

请在此处查看答案:Bash foreach loop 我看到你想要对mazeFile中的数字进行反向引用。因此,我建议 John1024 的答案。

修改:根据@guido的评论删除不必要的ls命令。