Permission denied error 使用sed更改文件名

Permission denied error using sed to change file name

我试图获取目录中每个文件的文件名,并在 运行 通过程序时 'rename' 创建相应的输出文件。当 运行 脚本时,我收到错误权限被拒绝,因为该行是要进行重命名的。

outputname=basename $file | sed -e "s/_Aligned.sortedByCoord.out.bam/_.gtf/"

例如一个文件名为 92_Aligned.sortedByCoord.out.bam,我希望输出为 92_.gtf。另一个文件叫做 10.5_rep1_Aligned.sortedByCoord.out.bam,输出应该叫做 10.5_rep1_.gtf.

我做错了吗?不确定 sed 是否是正确的方法,因为我在技术上不是重命名文件,而是从该名称创建另一个文件并更改它?

您想对 basename-sed 管道强制求值。 (使用 '$(' )并处理引用)

outputname=$(basename $file | sed -e "s/_Aligned.sortedByCoord.out.bam/_.gtf/")

或者仅使用 Bash 内置,这样会更快。

file_base=${file##*/}
outputname=${file_base/_Aligned.sortedByCoord.out.bam/_.gtf}