![如果已有 tar 版本,是否跳过 tar 文件?](https://linux22.com/image/893727/%E5%A6%82%E6%9E%9C%E5%B7%B2%E6%9C%89%20tar%20%E7%89%88%E6%9C%AC%EF%BC%8C%E6%98%AF%E5%90%A6%E8%B7%B3%E8%BF%87%20tar%20%E6%96%87%E4%BB%B6%EF%BC%9F.png)
该tar
命令是否有选项可以跳过/忽略对已打包好的文件进行打包?
考虑一下我有一个file1.txt
并且它被焦油化为file1.tar.gz
,现在我又复制了一份file1.txt
还有很多其他文件,比如file2.txt
,file3.txt
, ETC
我希望,在打包所有这些文件时,不要file1.txt
再次;我对排除所有文件不感兴趣,*.tar.gz
因为它没有告诉tar
命令不要选择file1.txt
涂焦油。
我真正需要预防的是file1.txt
通过命令选择tar
执行 tar 它作为file1.tar.gz
这之前就已经存在了(现在它被覆盖了)。
笔记:我可以编写一个脚本,但我想确保tar
命令无法做到这一点。
答案1
我可以使用以下 tar 命令来实现这一点:
tar -cf koko.tar --exclude="*.tar" kokotar
另一个巧妙的技巧是创建一个具有您想要忽略的文件名或扩展名模式的文件,然后从命令中读取该文件tar
以忽略所有此类文件:
tar -cf koko.tar --exclude-from <file | /path/to/exclusion/list/file> kokotar
or
tar -cf koko.tar -X <file | /path/to/exclusion/list/file> kokotar
语法格式:
tar -cf <name_of_new_tar_file>.tar --exclude='pattern' <source>
tar -cf <name_of_new_tar_file>.tar --exclude-from /path/to/name/exclusion/list <source>
答案2
soundstar
目前无法跳过具有 tar 版本的文件,因此这是一种跳过这些文件的方法:
find -type f -name '*.txt' -exec sh -c '
[ -f "${1%.txt}.tar.gz" ] && echo "$1 skipping ..." || echo "$1 taring ..."
' _ {} \;