我需要使用循环重命名一些文件,但我无法让它工作,因为我对 Linux 还很陌生。需要重命名的文件有:
E9-GOWN33_multiplemap.bin.10.fa
E9-GOWN33_multiplemap.bin.16.fa
E9-GOWN33_multiplemap.bin.21.fa
E9-GOWN33_multiplemap.bin.7.fa
更短的名称,例如:
E9.bin.10.fa
E9.bin.16.fa
E9.bin.21.fa
E9.bin.7.fa
我已经使用了rename
andmv
以及我在线程中看到的其他循环,但仍然无法让它工作。非常感谢任何意见!谢谢你!
答案1
如果你有 perl rename
(Ubuntu、Debian 和许多其他系统上默认),你可以这样做
rename -n 's/-GOWN33_multiplemap//' ./*fa
如果这为您提供了正确的文件名,请运行而不-n
实际重命名它们:
rename 's/-GOWN33_multiplemap//' ./*fa
答案2
你可以试试这个:
for f in *.fa; do
echo mv -- "$f" "${f%-*}.${f#*.}"
done
结果:
E9.bin.10.fa
E9.bin.16.fa
E9.bin.21.fa
E9.bin.7.fa
答案3
假设所有这些文件都位于当前目录中,并且所有这些文件(没有其他文件)都与通配模式匹配
E9-GOWN33_multiplemap.bin.*.fa
然后,你可以循环这些
for name in E9-GOWN33_multiplemap.bin.*.fa; do
# more code here
done
在循环内,$name
将是这些文件之一的名称。
E9-GOWN33_multiplemap.bin.10.fa
给定中的名称$name
,我们可以使用以下E9-GOWN33_multiplemap
命令从名称开头删除该位
${name#E9-GOWN33_multiplemap}
E9
然后只需将初始字符串重新附加到要创建的字符串的前面即可E9.bin.10.fa
:
newname=E9${name#E9-GOWN33_multiplemap}
然后mv
我们可以将旧文件名重命名为新文件名:
mv "$name" "$newname"
所以,这样我们就有了
for name in E9-GOWN33_multiplemap.bin.*.fa; do
newname=E9${name#E9-GOWN33_multiplemap}
mv "$name" "$newname"
done
或者更短,
for name in E9-GOWN33_multiplemap.bin.*.fa; do
mv "$name" "E9${name#E9-GOWN33_multiplemap}"
done
答案4
for f in *.fa; do mv -- "$f" "${f/-*p./.}"; done
- 输入:
E9-GOWN33_multiplemap.bin.7.fa E9-GOWN33_multiplemap.bin.10.fa E9-GOWN33_multiplemap.bin.16.fa E9-GOWN33_multiplemap.bin.21.fa
- 输出:
E9.bin.7.fa E9.bin.10.fa E9.bin.16.fa E9.bin.21.fa
你也可以使用这个脚本:
#!/bin/bash
# Set the directory path where the files are located
directory="/path/to/files"
# Loop through the files in the directory
for file in "$directory"/E9-GOWN33_multiplemap.bin.*.fa; do
# Extract the original filename
filename=$(basename "$file")
# Extract the numeric part from the original filename
number=$(echo "$filename" | awk -F'.' '{ print $3 }')
# Create the new filename
new_filename="E9.bin.$number.fa"
# Rename the file
mv "$file" "$directory/$new_filename"
done
在此脚本中,for 循环迭代指定目录中与模式 E9-GOWN33_multiplemap.bin.*.fa 匹配的文件。在循环内,使用基本名称提取原始文件名。然后,使用 awk 提取数字部分。最后,通过将固定部分(E9.bin.)与提取的数字组合来构造新的文件名。 mv 命令用于使用新文件名重命名文件。