Вы можете сделать это с помощью подстановки параметров Bash:
bash-3.2$ for archive in folder/subfolder*/*.zip; do
echo "Archive = ${archive}, Preview = ${archive%/*}/preview.zip"
done
Archive = folder/subfolder/archive.zip, Preview = folder/subfolder/preview.zip
Archive = folder/subfolder1/archive1.zip, Preview = folder/subfolder1/preview.zip
Archive = folder/subfolder2/archive2.zip, Preview = folder/subfolder2/preview.zip
Archive = folder/subfolder3/zip3.zip, Preview = folder/subfolder3/preview.zip
Archive = folder/subfolder4/zip4.zip, Preview = folder/subfolder4/preview.zip
Где ${archive%/*}
будет отбрасывать все, начиная с последнего /
в ${archive}
.
Это позволит вамчтобы проверить команду, которая будет выполняться.Измените это на:
mv "${archive}" "${archive%/*}/preview.zip"
... чтобы переименовать файлы (даже если в их именах есть пробелы).