У меня есть несколько файлов, которые нужно скопировать из разных каталогов, но у каждого файла одно и то же имя, поэтому мне нужно скопировать их в один каталог и переименовать каждый по очереди как «expect1, expect2, expect3» и т. Д. Код, который я пробовал до сих пор, -
let i=1; for file in delay* ; do (
cd $file
cp expectation_file ~/target_dir
cd ~/target_dir/
mv expectation_file expect{i}
((i++)) );
done
Но это просто заставляет каждый файл с именем "expect1". Может кто-нибудь поможет? Я думаю, что счетная петля неправильная, но не могу понять. Спасибо!
РЕДАКТИРОВАТЬ: Там была ошибка в коде. Если бы 1 = 1 вместо i = 1, а затем ++ i, а не i ++.
Это может быть более универсально.
#!/bin/bash
i=0
source_files=$(find /tmp -name "*.zip")
target_dir=~/temp1/
for source in ${source_files}; do
((i++))
mv ${source} ${target_dir}/$(basename ${source})${i}
done
Выражение source_files может иметь вид $(ls *.zip), в этом примере все zip-файлы находятся в каталоге /tmp/.