После помещения списка всех папок и подпапок в list.txt
с помощью команды ls -R
, у меня есть такие данные:
Invertebrates/Phylum_echinoderma/Class_Echinoidea/Fam_Diadematidae/Sp_01:
DSCF0214.JPG
DSCF0215.JPG
DSCF0231.JPG
Invertebrates/Phylum_echinoderma/Class_Echinoidea/Fam_PasDiadematidae:
Sp_02
Sp_03
Invertebrates/Phylum_echinoderma/Class_Echinoidea/Fam_PasDiadematidae/Sp_02:
DSCF8981.JPG
DSCF8988.JPG
Invertebrates/Phylum_echinoderma/Class_Echinoidea/Fam_PasDiadematidae/Sp_03:
DSCF0638.JPG
Invertebrates/Phylum_echinoderma/Class_Holothuroidea/Fam_Stichopodidae:
Sp_07
Invertebrates/Phylum_echinoderma/Class_Holothuroidea/Fam_Stichopodidae/Sp_07:
DSCF0724.JPG
Я хотел бы добавить строковый код, который позволит добавить путь перед изображениями ("XXX.JPG").
Поэтому я попытался сказать в bash: «если есть шаблон« .JPG », вставьте перед именем изображения« последнюю строку перед », содержащую« / Sp * ». И замените :
на /
.
Чтобы получить это:
Invertebrates/Phylum_echinoderma/Class_Echinoidea/Fam_Diadematidae/Sp_01:
Invertebrates/Phylum_echinoderma/Class_Echinoidea/Fam_Diadematidae/Sp_01/DSCF0214.JPG
Invertebrates/Phylum_echinoderma/Class_Echinoidea/Fam_Diadematidae/Sp_01/DSCF0215.JPG
Invertebrates/Phylum_echinoderma/Class_Echinoidea/Fam_Diadematidae/Sp_01/DSCF0231.JPG
Invertebrates/Phylum_echinoderma/Class_Echinoidea/Fam_PasDiadematidae:
Sp_02
Sp_03
Invertebrates/Phylum_echinoderma/Class_Echinoidea/Fam_PasDiadematidae/Sp_02:
Invertebrates/Phylum_echinoderma/Class_Echinoidea/Fam_PasDiadematidae/Sp_02/DSCF8981.JPG
Invertebrates/Phylum_echinoderma/Class_Echinoidea/Fam_PasDiadematidae/Sp_02/DSCF8988.JPG
Invertebrates/Phylum_echinoderma/Class_Echinoidea/Fam_PasDiadematidae/Sp_03
Invertebrates/Phylum_echinoderma/Class_Echinoidea/Fam_PasDiadematidae/Sp_03/DSCF0638.JPG
Invertebrates/Phylum_echinoderma/Class_Holothuroidea/Fam_Stichopodidae:
Sp_07
Invertebrates/Phylum_echinoderma/Class_Holothuroidea/Fam_Stichopodidae/Sp_07:
Invertebrates/Phylum_echinoderma/Class_Holothuroidea/Fam_Stichopodidae/Sp_07/DSCF0724.JPG
Я не нашел способа объяснить bash «последнюю строку перед», содержащую «/ Sp *».
Это мой код:
# Find the .JPG pattern and catch the picture name ("(.*\).JPG") and add "the last line before" that contain "/Sp*" and reput the .JPG pattern with the picture name:
sed 's/\(.*\).JPG/"the last line before" that contain "/Sp*""\1.JPG/' list.txt > list2.txt
sed -e 's/\:/\//g' list2.txt > list3.txt
Любой совет, который поможет мне завершить эту часть кода, очень важен.