Unix

收集所有以 .log 結尾的文件並創建 tar.gz 文件的腳本

  • September 3, 2018

我目前正在使用此腳本行從給定目錄結構中查找所有日誌文件,並將它們複製到另一個目錄,以便我可以輕鬆地壓縮它們。

find . -name "*.log" -exec cp \{\} /tmp/allLogs/ \;

我遇到的問題是,目錄/子目錄資訊失去了,因為我只複製文件。

例如我有:

./product/install/install.log
./product/execution/daily.log
./other/conf/blah.log

我最終得到:

/tmp/allLogs/install.log
/tmp/allLogs/daily.log
/tmp/allLogs/blah.log

我想擁有:

/tmp/allLogs/product/install/install.log
/tmp/allLogs/product/execution/daily.log
/tmp/allLogs/other/conf/blah.log

將它們複製到另一個目錄以壓縮它們的原因是什麼?以下將在一個步驟中從所有日誌文件中創建一個壓縮的 tar 文件,同時保持目錄結構(假設它從根目錄執行:

find . -iname '*.log' -print0 | xargs -0 tar zcf /tmp/test.tar.gz

例如:

kbrandt@alpine:~/scrap/tar$ find . *.log
.
./foo
./bar
./bar/baz.log
kbrandt@alpine:~/scrap/tar$ find . -iname '*.log' -print0 | xargs -0 tar zcf /tmp/test.tar.gz
#List files in the archive with the -t switch
kbrandt@alpine:~/scrap/tar$ tar -tzf /tmp/test.tar.gz 
./bar/baz.log

引用自:https://serverfault.com/questions/218249