У меня есть основной каталог, в котором есть четыре папки f1, f2, f3 and f4, каждая из этих папок имеет 10 папок, и каждая из этих 10 папок ff1...ff10 имеет некоторые .jpeg изображения с некоторыми именами, скажем, image1 .... и так далее. Я хочу знать, как переименовать эти .jpeg-изображения в каждой из этих папок из 10 папок в каждом из f1, f2, f3 and f4, так что я буду конкатенации родительских папок в начале его имени, например image1.jpeg находится в f3/ff1, тогда его имя будет f3_ff1_image1.jpeg, то же самое со всеми другими изображениями в других 10 папках в каждой из четырех основных папок. Если кто-нибудь может проконсультироваться, как это можно сделать в файле .sh.
С помощью цикла и некоторых манипуляций с строкой bash
while read -rd $'\0' f; do
d="${f%/*}"; p="${d/\//_}";
echo mv -- "$f" "${d}/${p}_${f##*/}"
done < <(find -type f -name '*.jpeg' -printf '%P\0')
(удалите echo после подтверждения, что он правильно соответствует файлам)
С помощью perl-based rename и bash globstar
shopt -s globstar
rename -nv -- 's|(f\d+)/(ff\d+)/(image\d+)|$1/$2/$1_$2_$3|' **/*.jpeg
(удалите -nv, как только вы подтвердите, что он правильно соответствует файлам)