Безобразно, но одна строка:
date -d "20110405 -2 days -$(date -d '20110405' '+%w') days" "+%Y%m%d"
РЕДАКТИРОВАТЬ : см. Комментарии.
date -d "20110405 -$(date -d "20110405 +2 days" +%u) days" "+%Y%m%d"
Пояснение:
- % w возвращает день недели. Пятница = 5, поэтому снимите еще 2 дня, чтобы получить правильное смещение.
- Работает как «20110405 -x дней», где x - количество дней до прошлой пятницы.
Мне не нравится, что он повторяет строку даты, но, надеюсь, это поможет.