如何将转换的输出发送到 bash 中的可写目录?

如何将转换的输出发送到 bash 中的可写目录?

我想将.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

一些小修复:

  1. 不要解析的输出ls,只需迭代扩展的通配符模式。

  2. 双引号变量(文件名可以包含空格)。

  3. 我使用“删除匹配后缀”而不是“替换”。

答案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 上

相关内容