Следующее должно сделать то, о чем вы просите:
#!/bin/bash
sz="gom"
dir="/where/the/files/are"
find $dir -type f -name "*${sz}*" -print0 | while read -d '' -r c; do
if [[ -f "$(echo $c | sed 's/'"${sz}"'//g')" ]]; then
# Strip the 'echo' to have this actually do things
echo rm -v "$c"
fi
done
Некоторые примечания к изменениям и исправлениям:
-printf "% f \ n"
предпочтительнее, чем -exec basename {} \;
. В этом случае я удалил find с удалением имени каталога, чтобы сценарий был безопасен для не плоских структур каталогов. for c в ossz
никогда не должно было работать - пустое имя ossz
не является переменной. $ ossz
было бы необходимо. sed
, вероятно, предпочтительнее, чем полагаться на сопоставление с шаблоном bash и замену по причинам удобочитаемости. Пример:
Для каталога, содержащего следующие файлы:
alb alba algomb algomba gomb
Сценарий, приведенный выше, выведет следующее:
rm -v ./algomb
rm -v ./algomba