Filesystems
使用特定過濾壓縮文件夾結構
我有一個這樣的文件夾結構:
/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
這是一種很好的做法,因為某些文件可能包含意外字元。