我正在尝试使用 tar(1) 创建比特定文件 ( fileA
) 更新的文件的存档。但是,当我使用 find(1) 获取要传递给 tar 的文件列表时,会多次列出一些文件:
$ touch fileA
$ mkdir test
$ touch test/{fileB,fileC}
$ tar -c -v $(find test -newer fileA) > test.tar
test/
test/fileC
test/fileB
test/fileC
test/fileB
使用 xargs(1) 将文件列表传递给 tar 会导致类似的行为:
$ find test -newer fileA | xargs tar -c -v > test.tar
test/
test/fileC
test/fileB
test/fileC
test/fileB
使用 sort(1) 和 uniq(1) 删除重复项也不起作用:
$ find test -newer fileA | sort | uniq | xargs tar -c -v > test.tar
test/
test/fileC
test/fileB
test/fileB
test/fileC
有没有办法让 tar 只包含比fileA
一次更新的每个文件?
编辑:我正在专门寻找一个不涉及 tar 的 GNU 扩展的解决方案(例如,它可以与suckless tar一起使用)。
找到
test
目录以及其中的单个文件,因此tar
添加test
(及其所有内容),test/fileB
然后test/fileC
.收紧你的
find
以避免这种情况:请注意,以这种方式使用命令替换可能会导致问题,例如包含空格或通配符的文件名;为避免这种情况,请使用
(使用 GNU
find
和tar
),或(假设您没有太多要归档的文件)。
您可以尝试以下方法: