tar как cp

Иногда нужно переписать дерево каталогов, но исключив из него один-два. Команда cp не имеет такой функциональности, а с помощью find может получиться довольно сложная конструкция. Гораздо проще это можно сделать с помощью tar. К примеру, есть каталог с такой структурой:

# ls -la ~/wps_expanded
total 48
drwxr-xr-x 6 root root 4096 Jun 13 2006 .
drwxr-xr-x 4 root root 4096 Dec 8 18:39 ..
drwxr-xr-x 2 root root 4096 Jun 13 2006 META-INF
drwxr-xr-x 5 root root 4096 Jun 13 2006 wp.scheduler.ejb.jar
drwxr-xr-x 17 root root 4096 Jun 13 2006 wps.war
drwxr-xr-x 4 root root 4096 Jun 13 2006 wps_facade.war

Необходимо переписать все каталоги, кроме wps.war. Команда может выглядеть так:

# cd ~/tmp
# tar cvf - ~/wps_expanded --exclude wps.war|tar xvf -

Если нужно исключить ещё какой-нибудь каталог, то можно продублировать --exclude. Например:

# tar cvf - ~/wps_expanded --exclude wps.war --exclude META-INF|tar xvf -

Вуаля. :)