我正在尝试在ubuntu shell中执行一个程序(比如说myApp)。
通常myApp的调用方式如下:myApp /path/to/file1 /path/tofile2
输出是一个矩阵,将打印在标准输出上。
我想要做的是为目录中的所有文件执行myApp并将输出保存在txt文件中。最后一部分,我希望很容易,我打算用myApp /path/to/file1 /path/tofile2 > myOutputfile.txt
。
我真的很难自动调用所有文件。 如果试图这样做:
for i in $(ls /tmp/ch0_*000000{0..483..4}.pcd);
do
f1=$i
f2=$i+1 # i also tried f2=i+1
myApp /tmp/$f1 /tmp/$f2 > myOutput.txt
done
所以我的问题是我无法访问列表中的下一个文件名以将其传递给myApp。我到目前为止所做的是在现有文件字符串中添加“+1”。 如何从返回的ls输出中获取下一个文件? 谢谢!
答案 0 :(得分:0)
除了Inian给出的链接 - why you shouldn't parse the output of ls(1) - 你无法在bash for
循环中获取“下一个”项目(至少据我所知)。
可以做的事情是记住 last 项目。
unset last_i
# Fudging the wildcarding a bit as it is unclear
# what your `ls` was supposed to achieve.
# This is assuming at least one matching file exists,
# otherwise you will get one loop with, literally,
# i=/tmp/ch0_*.pcd
for i in /tmp/ch0_*.pcd
do
if [[ ! -z $last_i ]]
then
myApp $last_i $i >> myOutput.txt
fi
last_i="$i"
done
注意:
$(ls ...)
。for
之后没有分号。$f1
,$f2
。> myOutput.txt
,您的输出文件将被覆盖每个循环; >>
输出将追加。根据需要进行调整。答案 1 :(得分:0)
替代解决方案对我有用:
for i in {0..3..1}; do
f1="/home/gv/Desktop/PythonTests/ch0_000000$i.txt"
k=$(($i+1))
f2="/home/gv/Desktop/PythonTests/ch0_000000$k.txt"
#myApp /tmp/$f1 /tmp/$f2 > myOutput.txt
echo "F1 = $f1 and F2=$f2"
ls $f1
ls $f2
done
在你的情况下应该像这样工作:
for i in {0..483..4}; do
f1="/tmp/ch0_000000$i.pcd" #or "/tmp/ch0_$i.pcd" , not clear how your files are numbered.
k=$(($i+1))
f2="/tmp/ch0_000000$k.pcd" #or "/tmp/ch0_$k.pcd" , not clear how your files are numbered.
myApp $f1 $f2 > myOutput.txt
#echo "F1 = $f1 and F2=$f2"
#ls $f1
#ls $f2
done