如何在符号链接文件上使用 sed?

如何在符号链接文件上使用 sed?

我有一些符号链接文件和一些普通文件,如下所示:

P_2_UC34_31_1.gz
P_2_UC34_31_2.gz
P_2_UC34_32_1.gz
P_2_UC34_32_2.gz
P_2_UC34_33_1.gz
P_2_UC34_33_2.gz

P_2_UC34_31_1.gzP_2_UC34_31_2.gz是符号链接。其他 4 个文件是普通文件(不是符号链接)。

我试图在所有文件_Ms之前_1和之中添加。_2

对于符号链接我尝试如下:

sed -i --follow-symlinks 's/_1/_Ms&/g' *.gz

但这没有用。我没有收到任何错误,文件名也没有更改。

我希望输出如下所示:

P_2_UC34_31_Ms_1.gz
P_2_UC34_31_Ms_2.gz
P_2_UC34_32_Ms_1.gz
P_2_UC34_32_Ms_2.gz
P_2_UC34_33_Ms_1.gz
P_2_UC34_33_Ms_2.gz

答案1

来自问题作者的评论:

好的,我用了这个方法并且成功了。

for file in *_1.gz; do
     mv "$file" "${file%_1.fq.gz}_Ms_1.fq.gz";
 done

不需要任何renameperl-rename


如果脚本必须更改某些内容,则需要进行一些小修正,例如

for file in *_1.fq.gz; do
     mv "$file" "${file%_1.fq.gz}_Ms_1.fq.gz";
 done

对于原始问题的解决方案,这将是类似的

for x in 1 2; do
  for file in *_${x}.gz; do
     mv "$file" "${file%_${x}.gz}_Ms_${x}.gz";
  done
done

(复杂的内心表达值得一试:file="aaaa_1.gz"; x=1; echo mv "$file" "${file%_${x}.gz}_Ms_${x}.gz"; echo output is mv aaaa_1.gz aaaa_Ms_1.gz.)


我加:

sed该问题与(不重命名文件,仅更改文本)或符号链接(由脚本很好地重命名)无关。

剧本中最精彩的部分就%"${file%_1.fq.gz}_Ms.....。在那里,${file}将扩展到变量的内容file,但指示应在末尾删除%_1.fq.gz字符串(如果可能)。_1.fq.gz

该部分_Ms.....只是添加到字符串中。

相关内容