2013-10-08 124 views
2

我有一个包含大量tar包的文件夹层次结构。我需要编写一个递归到每个目录的脚本,在相应的目录中提取tarball。将压缩包解压缩到同一个目录中

我试图

find ./ -name "*.tar.gz" -exec /bin/tar -zxvf {} \; 

与提取到PWD,而不是在对应的目录中的所有压缩包中执行的代码。

如果可能,请协助我。谢谢:)

+1

'find'的'-execdir'选项将在匹配的文件的相应目录中运行指定的命令,而不是在“查找”进程的CWD中运行。 – iscfrc

回答

3

您可以使用发现这样的:

find . -name "*.tar.gz" -exec bash -c 'd=$(dirname "{}") && b=$(basename "{}") && cd "$d" && tar zxvf "$b"' \; 

编辑以上find命令的一个较短的版本将是:

find . -name "*.tar.gz" -execdir tar zxvf "{}" \; 
+0

真棒!感谢您的快速回复!! – Jeevs

+0

不客气,很高兴它为你解决。 – anubhava

+0

更简单的'查找。 -name“* .tar.gz”-execdir tar zxvf“{}”\;'也会起作用。 – anubhava