我想在一个文件夹中执行操作的一组文件,我希望写一个scipt。每个文件都以mazeFilex
开头,其中x
可能与任何数字不同,是否有快速简便的方法对每个文件执行操作?例如我会做的
cat mazeFile0.txt | ./maze_ppm 5 | convert - maze0.jpg
如何知道文件将始终以mazeFile
开头?
答案 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
命令。