我有一些符号链接文件和一些普通文件,如下所示:
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.gz
和P_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
不需要任何rename
或perl-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.....
只是添加到字符串中。