bash – tar虽然日志另有说明,但不归档所有文件

我正在运行此命令行:

mysql -h $dbHost -u $dbUser --password=$dbPasswd -N -B -e \
"use cms; select uri from file_managed;" | grep public: | sed \
's/public:\/\//\/amk_aco_data\/cms\//g' | xargs -d "\n" tar -czvf /tmp/cmspublicfile.tgz 

它一直工作到一周前.
但现在不是归档~2k文件,而是归档中只有300个文件.
如果我单独运行它并将SQL查询保存到文件:

mysql -h $dbHost -u $dbUser --password=$dbPasswd -N -B -e \ 
"use cms; select uri from file_managed;" | grep public: | sed \ 
's/public:\/\//\/amk_aco_data\/cms\//g' > files.toarchive 

然后

tar -T files.toarchive -czvf /tmp/cmspublicfile.tgz, 

它按预期工作,我在归档中得到了~2k文件.
我猜这个问题与xargs有关,但我不知道为什么它停止工作.

一些解释:SQL查询打印出文件URL列表.

任何人都可以告诉我应该检查什么?

最佳答案 你跳过xargs和usr tar -T – 它将从stdin中读取文件名

所以lat部分将是:

| tar -T - -czvf /tmp/cmspublicfile.tgz

这与工作版本更相似

完整的命令应该是这样的:

mysql -h $dbHost -u $dbUser --password=$dbPasswd -N -B -e \
"use cms; select uri from file_managed;" | grep public: | sed \
's/public:\/\//\/amk_aco_data\/cms\//g' | tar -czvf /tmp/cmspublicfile.tgz -T -
点赞