使用 tar 递归排除具有模式的目录

使用 tar 递归排除具有模式的目录

我有一个包含各种 python 包的目录,我想使用 tar 对其进行存档。我需要排除__pycache__构建/测试过程中留下的大量文件夹,但使用--exclude "__pycache__"无法实现此目的。如何让 tar 忽略与该模式匹配的所有子目录?

tar -cvf myarchive.tar -C ~/myproject package1/ package2/ --exclude "__pycache__"

重新创建:

me@me-laptop:~/myproject$ pwd
/home/me/myproject
me@me-laptop:~/myproject$ tree
.
├── package1
│   ├── include
│   └── __pycache__
└── package2
    ├── include
    └── __pycache__

6 directories, 0 files
me@me-laptop:~/myproject$ tar -cvf myarchive.tar -C ~/myproject package1/ package2/ --exclude "__pycache__"
package1/
package1/include/
package1/__pycache__/
package2/
package2/include/
package2/__pycache__/

答案1

您需要--exclude在命令开头添加开关,请参阅。这个解决方案适用于我的 openSUSE 机器,我现在没有其他可用的发行版。

host:/tmp # find test*
test1
test1/file1
test1/__pycache__
test1/__pycache__/file1-py
test1/include
test1/include/file1-incl
test2
test2/__pycache__
test2/__pycache__/file2-py
test2/include
test2/include/file2-incl
test2/file2

host: # tar --exclude='__pycache__' -cv test* -f testtar.tar
test1/
test1/file1
test1/include/
test1/include/file1-incl
test2/
test2/include/
test2/include/file2-incl
test2/file2

相关内容