当前位置: 首页 > 知识库问答 >
问题:

如何循环目录中的文件并更改路径,以及在文件名中添加后缀

寇涵容
2023-03-14

我需要编写一个脚本,用不同的参数启动我的程序,但我不熟悉Bash。我以以下方式开始我的计划:

/我的计划。exe数据/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并启动我的程序。

共有3个答案

殷承恩
2023-03-14
for file in Data/*.txt
do
    for ((i = 0; i < 3; i++))
    do
        name=${file##*/}
        base=${name%.txt}
        ./MyProgram.exe "$file" Logs/"${base}_Log$i.txt"
    done
done

name=${file###*/}替换(shell参数扩展)将删除直到最后一个/的前导路径名。

base=${name%.txt}替换将删除尾部的。txt。如果扩展可以变化,那么就有点棘手了。

诸嘉澍
2023-03-14

很抱歉对线程进行了坏死处理,但是每当您通过globbing对文件进行迭代时,最好避免glob不匹配的情况(这会使循环变量扩展为(不匹配的)glob模式字符串本身)。

例如:

for filename in Data/*.txt; do
    [ -e "$filename" ] || continue
    # ... rest of the loop body
done

参考:重击陷阱

冯宏恺
2023-03-14

首先有几个注意事项:当您使用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/part)
  • $(...)运行一个shell命令,并在命令行中的该点插入其输出
  • basename Somepath. txt输出Somepath的基本部分,并从末尾删除. txt(例如/Data/file.txt-

如果需要使用Data/file.txt而不是/Data/file.txt运行MyProgram,请使用${filename#/}删除前导斜杠。另一方面,如果您要扫描的确实是Data而不是/Data,只需在Data/*. txt中使用作为文件名。

 类似资料:
  • 我在文本编辑器中有一个另存为...功能。我想做一个另存为,保存到一个新文件,但是我要保存的永久文件现在应该总是这个新文件。所以当我点击我的另一个按钮,保存,而不是保存到以前的位置,将继续保存到用JFileChooser选择的位置。 我有一个名为currentFile的文件对象,它应该链接到通过“另存为”选择的文件。我目前正在通过在我的按钮操作执行功能中创建一个名为fileName的文件,然后将cu

  • 问题内容: 我正在尝试为SVN编写一个提交后钩子,该钩子托管在我们的开发服务器上。我的目标是尝试自动将已提交项目的副本检出到服务器上托管的目录。但是,我需要能够仅读取传递给脚本的目录字符串中的最后一个目录,以便签出到托管我们项目的同一子目录。 例如,如果我对项目“ example”进行SVN提交,则我的脚本将“ / usr / local / svn / repos / example”作为其第一

  • 我有一个Maven项目,我试图使用javafx(我使用Eclipse)我想改变我的文件的路径。我有过 这在下一个文件夹结构中运行良好 但是我想要像 我尝试了

  • 我想从SD卡文件路径中获取文件名。e、 g.:/storage/sdcard0/DCIM/Camera/1414240995236。jpg我想得到1414240995236。jpg我已经编写了获取相同内容的代码,但它不起作用。请帮忙<下面是我的代码:

  • 问题内容: 我正在尝试编写一个node.js脚本,该脚本监视文件目录中的更改,然后打印更改的文件。如何修改此脚本,以便它监视目录(而不是单个文件),并在更改文件时显示目录中的文件名? 问题答案: 试试Chokidar: Chokidar仅使用fs即可查看文件,从而解决了一些跨平台问题。

  • 像这种方式用相对路径引入的文件,在配置文件中配置打包规则 将输出的chunk命名为hash 然而在rollup打包后的chunk文件中 这种相对路径的名字不会变为对应hash名 怎么解决? 希望相对路径引入的文件名打包后根据配置规则也会改变