Переименование файла путем передачи вывода awk в файл *.tsv

Переименование файла путем передачи вывода awk в файл *.tsv

Иметь данные и *.tsvфайл, где данные описаны. Хотелось бы использовать описание и переименовать данные соответственно.

Пожалуйста, посмотрите:

  • awkкоманда для фильтрации tsv дает следующее:

      common_voice_en_22090684.mp3 four
      common_voice_en_22090691.mp3 no
      common_voice_en_22090696.mp3 one
    
  • пройдите по каталогу, где находятся *.mp3:

    for i in *.mp3 ; do
    echo $i
    
  • mvэто команда для переименования файла, и она принимает два аргумента (файл для изменения и то, что именно)

Как использовать awk(чтобы прочитать и использовать описание) и mv(чтобы переименовать существующие файлы с переданным описанием)? Итак, глядя на приведенный выше пример, результат будет следующим:

four.mp3    
no.mp3  
one.mp3 

Не обязательно использовать предлагаемые команды. Любые идеи, предложения, как это сделать, приветствуются!

решение1

Это не соответствует вашим требованиям, но если вы ожидаете обрабатывать много файлов, вы можете получить лучшую производительность, используя ваш .tsv в качестве драйвера вместо расширения оболочки, поскольку вы не будете открывать tsv один раз для mp3. Удалите , echoесли он выглядит так, как вы ожидаете.

$ while read -r src tgt; do [ -f "$src" ] && echo mv -i "$src" "$tgt.mp3"; done < file.tsv

решение2

IIUC, вы хотите что-то вроде этого после сохранения выводаКоманда awk для фильтрации tsvв файле:

#!/usr/bin/env sh

for i in *.mp3
do
    new_name="$(awk -v name="$i" '$1 == name {print $2}' file)"
    if [ -n "$new_name" ]
    then
        echo mv -- "$i" "$new_name"
    fi
done

Remove echoдля фактического выполнения переименования, но сначала запустите его с ним, чтобы убедиться, что это то, что вам нужно. Также обратите внимание, что есть небольшая вероятность, что это mvне удастся, потому что исходный файл будет уже удален к тому времени, когда выполнение скрипта достигнет этой строки — вы можете использовать set -eдля выхода сразу после первой mvнеудачи.

Связанный контент