在每个文件的子字符串上运行命令

时间:2013-08-01 11:16:49

标签: bash

假设我有一些文件:

samplea.txt
sampleb.txt
samplec.txt

我想用这种形式运行一些命令:

./cmd -foo a.xml -bar samplea.txt

首先我试过

for file in "./*.txt"
do
    echo -e $file
done

但是这样它会以直线打印每个文件。通过尝试:

echo -e $file\n

它不会产生预期的(每个文件的单行)。 甚至无法通过问题的第一部分,即在每个文件上运行命令(可以通过find(...)-exec实现),但我真正想做的是提取子串每个名字。

这样做的:

echo ${file:1}

不起作用,因为我只能在分割文件名后才能这样做,从每个文件名中获取“a”,“b”,“c”。

如果这听起来令人困惑,我很抱歉,但这是我的第一个bash脚本。

1 个答案:

答案 0 :(得分:6)

不要引用通配符表达式。您可以使用参数扩展来删除字符串的一部分:

for file in sample*.txt ; do
    part=${file#sample}                 # Remove "sample" at the beginning.
    part=${part%.txt}                   # Remove ".txt" at the end.
    ./cmd -foo "$part".xml -bar "$file"
done