我试图在运行中找到并压缩特定类型的文件,但是TAR压缩的文件比我找到的文件多。 例如:
我发现没有。 7
/mnt/1 % find . -name *.pdf
./. /01.pdf
./slide/01.pdf
./slide/03.pdf
./slide/02.pdf
./.Trash-0/files/01.pdf
./.Trash-0/files/01.2.pdf
./.Trash-0/files/01 - Introduzione ISTI + note.pdf
但是当我动态压缩时,存档还包含其他文件
/mnt/1 % find . -name *.pdf | xargs tar czvf /root/Desktop/evidence/pdf.tar
deft8vm /mnt/1 % tar -tvf /root/Desktop/evidence/pdf.tar
drwxr-xr-x root/root 0 2014-04-14 13:51 ././
drwxr-xr-x root/root 0 2014-04-15 08:27 ././. /
-rw-r--r-- root/root 9070641 2014-04-14 13:40 ././. /01.pdf
drwx------ root/root 0 2014-04-15 08:31 ././. /4Dell/
drwx------ root/root 0 2014-04-15 08:31 ././. /4Dell/4Dell.afd/
-rw-r--r-- root/root 4992592 2014-04-15 08:31 ././. /4Dell/4Dell.afd/file_000.aff.csv
-rw-r--r-- root/root 1051669804 2014-04-15 08:31 ././. /4Dell/4Dell.afd/file_000.aff
-rw-r--r-- root/root 1524 2014-04-15 08:31 ././. /4Dell/4Dell.afd.txt
drwx------ root/root 0 2014-04-14 11:14 ././lost+found/
drwxr-xr-x root/root 0 2014-04-14 13:51 ././slide/
hrw-r--r-- root/root 0 2014-04-14 13:40 ././slide/01.pdf link to ././. /01.pdf
/mnt/1 % tar -tf /root/Desktop/evidence/pdf.tar | wc -l
29
答案 0 :(得分:3)
这就是为什么你不应该在没有find
和xargs
或兼容选项的情况下使用-print0
和-0
。
文件名./. /01.pdf
分为./.
和/01.pdf
,./.
等同于.
,即整个当前目录。
还有另一个更微妙的问题:xargs
没有以输入作为参数运行命令。它使用输入块作为参数运行多个命令。这意味着如果你有足够的文件,它们将被拆分为多个tar命令,相互覆盖。
相反,如果您正在使用GNU,则可以使用find -print0
打印\0
个分隔的文件名,并使用tar --null -T
来阅读它们:
find . -name '*.pdf' -print0 | tar czvf pdf.tar --null -T -
答案 1 :(得分:0)
另一种方法
find . -iname "*.pdf" -exec tar --append --file=somefile.tar {} \;