2013-10-08 122 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