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

попробуй

file_count=$(ls -lrt ${src_dir}/*.txt | grep -c $RUN_DATE)

while [ "$file_count" != 3 ]
do
    echo "file missing";
    sleep 60
    file_count=$(ls -lrt ${src_dir}/*.txt | grep -c $RUN_DATE)
else
        echo "all 3 files are available";
        cp ${src_dir}/${file1} $tgt_dir;
        cp ${src_dir}/${file2} $tgt_dir;
        cp ${src_dir}/${file3} $tgt_dir;
    echo "files copied";
    return

done

обратите внимание, что

  • Плохая идея анализировать вывод ls, если только вы не уверены, что у вас нет забавного символа (пробел, новая строка...)
  • Я заменил grep | wc -lна grep -c, которые делают то же самое
  • Таким же образом я заменил обратную цитату на$( )

Редактировать :какой файл отсутствует?

заменить

echo "file missing";

по

test -f ${src_dir}/${file1} || echo ${file1} missing
test -f ${src_dir}/${file2} || echo ${file2} missing
test -f ${src_dir}/${file3} || echo ${file3} missing
1
02.06.2021, 11:04
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

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

1
28.07.2021, 11:28

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

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

1
28.07.2021, 11:28

Теги

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