小编典典

如何遍历目录中的文件并更改路径并将后缀添加到文件名

all

我需要编写一个脚本,用不同的参数启动我的程序,但我是 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 for
end for

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


阅读 115

收藏
2022-03-03

共1个答案

小编典典

首先要注意几点:当您Data/data1.txt用作参数时,它真的应该是/Data/data1.txt(带有前导斜杠)吗?此外,外部循环应该只扫描
.txt 文件,还是 /Data 中的所有文件?这是一个答案,假设/Data/data1.txt只有 .txt 文件:

#!/bin/bash
for filename in /Data/*.txt; do
    for ((i=0; i<=3; i++)); do
        ./MyProgram.exe "$filename" "Logs/$(basename "$filename" .txt)_Log$i.txt"
    done
done

笔记:

  • /Data/*.txt扩展为 /Data 中文本文件的路径( 包括 /Data/ 部分)
  • $( ... )运行 shell 命令并将其输出插入到命令行中的该点
  • basename somepath .txt输出 somepath 的基本部分,从末尾删除 .txt(例如/Data/file.txt-> file

如果您需要使用Data/file.txt而不是运行 MyProgram
/Data/file.txt,请使用"${filename#/}"删除前导斜杠。另一方面,如果您真的Data不想/Data扫描,只需使用for filename in Data/*.txt.

2022-03-03