在 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
语句将无法按预期工作。
我有 .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
语句将无法按预期工作。