在 bash 脚本中将 *.txt.csv 文件重命名为 .csv

renaming *.txt.csv files to .csv in bash script

我有 .txt 文件,我将其作为 $item,然后我用

更改编码
iconv -f $currentEncoding -t $targetEncoding "$item" -o "$item.tmp"

然后我再次使用

将它保存到 txt 文件
 mv "$item.tmp" "$item.txt";

接下来我将在 txt 文件中修剪一些内容并将其保存为 csv 文件

 tr -d '"' < "$item.txt" > "$item.csv";

但最终我的文件以扩展名“*.txt.csv”存储 - 我希望它们只是 .csv - 任何人都可以帮助我,请问我做错了什么或者我可以改变什么。谢谢

据我了解,您的 $item 值中已经包含 .txt。 所以,如果你在每个命令后列出你的文件,你应该看到像

这样的中间文件
xyz.txt.tmp
xyz.txt.txt
xyz.txt.csv

因此,当您设置 item 变量时,只需按如下所示执行 ${item%%.*},它应该会按预期工作。

item=xyz.txt               
item="${item%%.*}"    
echo $item        
xyz

运行:

for f in *.txt.csv; do mv $f ${f/.txt./.}; done

如果变量 $f 包含字符串 item.txt.csv,表达式 ${f/.txt./.} 从文件名中删除 .txt 并仅给出字符串 item.csv

注意:如果其中一个文件名包含空格,for 语句将无法按预期工作。