Я новичок в Linux - Ubuntu. Мне нужно переименовать большое количество файлов (с одинаковым расширением) в соответствии со списком имен в файле. У меня есть список имен в текстовом файле.
Например
Текущее имя файла => Новое имя файла
GCA_001340506.1_ASM54621.fna => воск.fna
GCF_0133435.1_ASM4354653.fna => штаммы2213. fna
Мне нужно переименовать текущее имя файла в новое имя файла. Как мы видим, мне сначала нужны две вещи, чтобы сопоставить соответствующее имя файла, а затем переименовать его.
Я не могу найти правильный способ выполнить эту задачу. Пожалуйста, помогите мне в этом отношении.
Аван
Я создал следующую функцию. вы должны использовать таким образом:
$ furqan_mv filenames.txt
файл filenames.txt должен иметь следующий формат:
oldfile => newfile
расширение всегда fna . Вот функция:
furqan_mv() {
ext=".fna"
while IFS= read -r line; do
oldfile=`echo $line | awk '{print $1}'`
newfile=`echo $line | awk '{print $3}'`
mv $oldfile.$ext $newfile.$ext
done < $1
}
Если ваш формат файла source.fna => target.fna
, вы можете использовать mmv
для переименования файлов. Если не указывать аргументы от
до
в командной строке, mmv
примет пару исходный-целевой, по одной на строку, на стандартный ввод.
awk -F '=>' '{print $1 $2}' files.txt | mmv
mmv
действительно может обрабатывать этот формат напрямую, но это скорее совпадение.
mmv игнорирует строки в стандартном вводе, которые выглядят как его собственные сообщения об ошибках и «готово», а также все строки, начинающиеся с пробела, и будут принимать пары шаблонов с или без промежуточных "->" (или "- ^", "=>" или "= ^").
cat file.txt | mmv
добро пожаловать в Askubuntu!
Будет ли это работать?
Я взял имена из этого:
, поскольку вы не включаете содержимое файла с новыми именами файлов
for file in *.fna;
do
read line;
mv -v "${file}" "${line}"; done < names.txt
Результаты тестового запуска, например, файлы