Просто используйте grep -l
вместе с -R
! Вот полная острота:
grep -Rl "STRING" web/ | xargs sed -i "/STRING/d"
Следующее должно сделать то, что Вы хотите:
rsync --recursive --prune-empty-dirs --include '*/' --include '*/B/**' --exclude '**' origin_path/ destination_path/
Первое правило включает все каталоги (иначе rsync, не будет убывать в высокоуровневые каталоги). Второе правило включает все в "B" подкаталоги. Третье правило исключает все остальное. --prune-empty-dirs
опция игнорирует пустые каталоги (так как мы включаем все каталоги с первым правилом).