Linux bash脚本同时为2个文件夹

时间:2015-11-10 22:24:26

标签: linux bash

这是我的bash可执行命令:

ELSE NULL

所以,我在path1中有两个文件夹,在path2中有另一个文件夹。路径1和路径2具有相同的文件名但具有不同的扩展名。例如, Path1有许多扩展名为" .txt" (file1.txt)和path2有很多扩展名为" .title" (file1.title)。

也就是说,path1有文件夹folder1,它有文件file1.txt,file2.txt,file3.txt等等。同样,路径2有文件夹folder2,文件夹有file1.title,file2.title,file3 .title等等..

list_of_files包含数据:

while read line
do
./ngram -order 1 -lm path1/$line -ppl path2/$line -debug 4 > path3/$line
done < input_list_of_files

依旧......

我想在&#34; -lm&#34;之后输入file1.txt。选项并在&#34; -ppl&#34;之后输入file1.title。选项。当我一次为一个文件操作时,这可以正常工作。

也就是说,当在&#34; -lm&#34;之后输入file1.txt时,我们应该在&#34; -ppl&#34;之后输入file1.title。

我想通过同时输入相同的文件名但不同的扩展名来同时对文件夹中的所有文件进行批量计算。我该怎么做?请帮忙!

我使用过的例子:

file1.txt
file2.txt
file3.txt

输出文件如下:

./ngram -order 1 -lm Path1/Army_recruitment.txt -ppl Path2/Army_recruitment.title -debug 4 > Path3/Army_recruitment.txt

此输出根据可执行文件./ngram生成。这是一个包。

2 个答案:

答案 0 :(得分:3)

# As suggested by @CharlesDuffy: use read -r to ensure that text is taken literally
while read -r line ; do
    name="${line%.txt}"     # Strip off .txt extension
    ./ngram -order 1 -lm "path1/$name.txt" -ppl "path2/$name.title" -debug 4 > "path3/$name"
done < input_list_of_files

答案 1 :(得分:1)

除了目录名之外,您还可以使用命令basename来删除路径后缀。所以:

while read line
do
path2file=$(basename $line .txt).title
./ngram -order 1 -lm path1/$line -ppl path2/$path2file -debug 4 > path3/$line
done < input_list_of_files

(假设您仍希望输出文件末尾有.txt