猿问

如何使用Bash遍历目录中的文件?

我需要编写一个脚本,以不同的参数启动我的程序,但我对Bash还是新手。我从以下几个方面开始我的节目:

./MyProgram.exe Data/data1.txt [Logs/data1_Log.txt].

下面是我想要做的事情的伪代码:

for each filename in /Data do
  for int i = 0, i = 3, i++
    ./MyProgram.exe Data/filename.txt Logs/filename_Log{i}.txt
  end forend for

因此,我真的很困惑如何从第一个参数创建第二个参数,因此它看起来像是dataABCD_Log1.txt并启动了我的程序。


明月笑刀无情
浏览 792回答 3
3回答

幕布斯6054654

很抱歉使线程亡灵,但是每当您通过全局遍历文件时,很好的做法是避免出现这样的情况:GLOB不匹配(这使得循环变量扩展到(不匹配的)GLOB模式字符串本身)。例如:for filename in Data/*.txt; do     [ -e "$filename" ] || continue     # ... rest of the loop bodydone参考资料:撞击陷阱

UYOU

for file in Data/*.txtdo     for ((i = 0; i < 3; i++))     do         name=${file##*/}         base=${name%.txt}         ./MyProgram.exe "$file" Logs/"${base}_Log$i.txt"     donedone这个name=${file##*/}替代(壳参数展开)直到最后一次移除前面的路径名。/.这个base=${name%.txt}替换移除尾随.txt..如果扩展可以改变的话,就会更加棘手。
随时随地看视频慕课网APP
我要回答