假设我要提取当前目录及其递归子目录下所有扩展名为.pdf的文件,并保持目录结构,到另外一个目录下,怎么弄呢?

find命令可以得到待提取文件的列表,但是cp没有递归建立子目录的功能。所有文件cp到一个目录下,就乱了,还可能发生重名文件覆盖。怎么弄呢?

于是想到了tar,所以这样就搞定了(只有一个tar加-v这样只显示一次复制的文件):

find -name '*.pdf' -print0 | xargs -0 tar -cf - | tar -C /tmp/dst -xvf -

虽说写个脚本也不难,但不依赖第三方脚本而是靠UNIX工具的组合总是好的。