Переименование нескольких файлов - соответствует списку в файле

Я новичок в Linux - Ubuntu. Мне нужно переименовать большое количество файлов (с одинаковым расширением) в соответствии со списком имен в файле. У меня есть список имен в текстовом файле.

Например

Текущее имя файла => Новое имя файла

GCA_001340506.1_ASM54621.fna => воск.fna

GCF_0133435.1_ASM4354653.fna => штаммы2213. fna

Мне нужно переименовать текущее имя файла в новое имя файла. Как мы видим, мне сначала нужны две вещи, чтобы сопоставить соответствующее имя файла, а затем переименовать его.

Я не могу найти правильный способ выполнить эту задачу. Пожалуйста, помогите мне в этом отношении.

Аван

0
задан 10 October 2020 в 19:26

3 ответа

Я создал следующую функцию. вы должны использовать таким образом:

$ 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
}
0
ответ дан 4 January 2021 в 08:20

Если ваш формат файла source.fna => target.fna , вы можете использовать mmv для переименования файлов. Если не указывать аргументы от до в командной строке, mmv примет пару исходный-целевой, по одной на строку, на стандартный ввод.

awk -F '=>' '{print $1 $2}' files.txt | mmv

mmv действительно может обрабатывать этот формат напрямую, но это скорее совпадение.

mmv игнорирует строки в стандартном вводе, которые выглядят как его собственные сообщения об ошибках и «готово», а также все строки, начинающиеся с пробела, и будут принимать пары шаблонов с или без промежуточных "->" (или "- ^", "=>" или "= ^").

cat file.txt | mmv
2
ответ дан 4 January 2021 в 08:20

добро пожаловать в Askubuntu!

Будет ли это работать?


Я взял имена из этого:

https://unix.stackexchange.com/questions/613880/rename-multiple-files-accordingly-with-names-list#613880

, поскольку вы не включаете содержимое файла с новыми именами файлов

for file in *.fna;

 do
  read line;
   
   mv -v "${file}" "${line}"; done < names.txt

Результаты тестового запуска, например, файлы

  • 1.pdf> Fabio.pdf
0
ответ дан 4 January 2021 в 08:20

Другие вопросы по тегам:

Похожие вопросы: