我想将.tbl
文件转换到我有只读访问权限的目录.csv
中。我使用以下命令:/data/
for i in `ls *.tbl`; do
sed 's/|$//' $i > ${i/tbl/csv}
echo $i
done
但我得到了:
-bash: supplier.csv: Permission denied
我不知道如何更改脚本以便将输出保存在可写目录中。有什么解决办法吗?
答案1
只需指定不同的路径:
for tbl in *.tbl ; do
sed 's/|$//' "$tbl" > /another/path/"${tbl%.tbl}".csv
echo "$tbl"
done
一些小修复:
不要解析的输出
ls
,只需迭代扩展的通配符模式。双引号变量(文件名可以包含空格)。
我使用“删除匹配后缀”而不是“替换”。
答案2
/path/to/writable/dir/
只需在文件名前指定路径(此处):
for i in *.tbl; do
sed 's/|$//' "$i" >"/path/to/writable/dir/${i/%tbl/csv}"
echo "$i"
done
你永远不应该解析ls
(为什么?) 而且总是引用变量,如$i
这里。%
在模式的开头添加使其与字符串的结尾匹配,这样文件名tbl.tbl
就变成了tbl.csv
而不是csv.tbl
。阅读更多关于参数扩展在 bash-hackers.org 上。