我有一个约有2万个文件的文件夹。文件根据模式命名xy_{\d1,5}_{\d4}\.abc
,例如xy_12345_1234.abc
。我想使用以下命令压缩其中的前10K:
ls | sort -n -k1.4,1.9 | head -n10000 | xargs tar -czf xy_0_10000.tar.gz
但是,生成的文件中只有大约2K个文件。
ls | sort -n -k1.4,1.9 | head -n10000 | wc -l
但是返回10000,如预期的那样。
在我看来,我对这里的一些基本知识误解了。
我在Linux Mint 17.1和GNU tar 1.27.1上使用zsh 5.0.2
编辑:
@Archemar建议的分支听起来很合理,最新的fork覆盖了结果文件-该文件包含文件的“尾部” -7773到9999。
的结果xargs --show-limit
:
Your environment variables take up 3973 bytes
POSIX upper limit on argument length (this system): 2091131
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2087158
Size of command buffer we are actually using: 131072
在我的情况下替换-c
为-r
或-u
不起作用。错误消息是tar: Cannot update compressed archives
同时使用-r
和-u
是无效的,并且失败tar: You may not specify more than one '-Acdtrux', '--delete' or '--test-label' option
替换-c
为-a
似乎也是无效的,并且以相同的方式失败,tar: You must specify one of the '-Acdtrux', '--delete' or '--test-label' options
尽管我不认识这个问题azf
,但对我而言Acdtrux
似乎是分离的。
编辑2:
-T看起来是个好方法,我也在这里找到了一个例子。
但是当我尝试
ls | sort -n -k1.4,1.9 | head -n10000 | tar -czf xy_0_10000.tar.gz -T -
我得到
tar: option requires an argument -- 'T'
好吧,也许文件名没有达到tar?但是看起来像他们,是因为当我执行时
ls | sort -n -k1.4,1.9 | head -n10000 | tar --null -czf xy_0_10000.tar.gz -T -
我得到
tar: xy_0_.ab\nxy_1_...<the rest of filenames separated by literal \n>...998.ab
Cannot stat: File name too long
那么,为什么tar无法看到文件名呢?