
Мне нужно переименовать некоторые файлы с помощью цикла, но я не могу заставить это работать, так как я еще новичок в 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
и mv
другие циклы, которые видел в темах, но все равно не могу заставить их работать. Любой вклад будет очень ценен! Спасибо!
решение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 в указанном каталоге. Внутри цикла исходное имя файла извлекается с помощью basename. Затем числовая часть извлекается с помощью awk. Наконец, новое имя файла создается путем объединения фиксированных частей (E9.bin.) с извлеченным числом. Команда mv используется для переименования файла с новым именем файла.