在运行中查找并压缩文件

时间:2014-04-18 16:09:49

标签: bash find tar

我试图在运行中找到并压缩特定类型的文件,但是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

2 个答案:

答案 0 :(得分:3)

这就是为什么你不应该在没有findxargs或兼容选项的情况下使用-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 {} \;