попробуй
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
обратите внимание, что
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
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
не удалась.
Это не соответствует вашим требованиям, но если вы планируете обрабатывать много файлов, вы можете повысить производительность, используя свой.tsv в качестве драйвера вместо расширения оболочки, потому что вы не будете открывать tsv один раз для каждого mp3.. Удалите echo
, если он выглядит так, как вы ожидаете.
$ while read -r src tgt; do [ -f "$src" ] && echo mv -i "$src" "$tgt.mp3"; done < file.tsv