Чтобы удалить первый элемент из $@, используйте shift
.
#!/bin/bash
opt=$1
shift
case "$opt" in
--header )
for filename in "$@" ; do
sed -i -e '1 e cat header' "$filename"
done
;;
--footer )
footer=~/dev/sed/footer
for filename in "$@" ; do
cat "$footer" >> "$filename"
done
;;
esac
Предполагая, что, как вы сказали в комментариях, имена в текстовом файле уникальны, что будет только один подкаталог с таким именем во всем дереве каталогов, тогда вы можете просто выполнить (в баш):
while read -r dirName; do
cp -r dir0/*/"$dirName"/ /path/to/newTargetDir
done < listOfDirs.txt