Filesystems

使用特定過濾壓縮文件夾結構

  • June 26, 2019

我有一個這樣的文件夾結構:

/foo
/foo/bar
/foo/bar2
/foo/bar3

在每個文件夾(包括/foo)中,我都有名稱以 . 結尾的文件.txt。但是,我想從中排除這些文件,/foo並且我想包括來自 /foo/bar /foo/bar2 等的文件。

但是,如果我這樣做:

tar cvfz foo.tgz --exclude="/foo/*.txt" /foo

我錯過.txt了完整層次結構中的所有文件,而不僅僅是/foo.

有人知道如何實現嗎?

不確定您是否可以僅使用 tar 來做到這一點,因為--exclude似乎只接受 glob 樣式的模式。但是您可以使用 find 獲取文件列表,然後使用正則表達式使用 grep 過濾這些文件。

find foo -type f -print0 | grep -z -v '^foo/[^/]*.txt$' | tar cvf foo.tgz --null -T -

options-print0和指示相應的命令使用空字節而不是換行符來分隔記錄(文件名)-z--null這是一種很好的做法,因為某些文件可能包含意外字元。

引用自:https://unix.stackexchange.com/questions/526966