【发布时间】:2017-05-29 21:05:23
【问题描述】:
当从 crontab 运行以下命令时,遇到文件名中包含空格的文件时会发生 tar 错误。
/tar -C / -zcvf /root/archive-of-files-with-spaces-in-filename.tar.gz `find /var/www/html -mmin -1450 -print | sed 's|^/||'`
将开关更改为 -print0 或完全移除 -print 开关并不能解决问题:
/tar -C / -zcvf /root/archive-of-files-with-spaces-in-filename.tar.gz `find /var/www/html -mmin -1450 -print0 | sed 's|^/||'`
或
/tar -C / -zcvf /root/archive-of-files-with-spaces-in-filename.tar.gz `find /var/www/html -mmin -1450 | sed 's|^/||'`
tar 也会抛出同样的错误。
如何重写命令以允许将带有空格的文件名提供给 tar 而不被分解为不存在的目录名?
文件名产生的错误示例: "2016-12-15 名称文件修复exportICS.php"
tar:var/www/html-calendar.northpawfamilycloud.xyz/pages/2016-12-15:
无法统计:没有这样的文件或目录
tar:名称:无法统计:没有这样的文件或目录
tar:文件:无法统计:没有这样的文件或目录
tar:修复:无法统计:没有这样的文件或目录
tar:exportICS.php:无法统计:没有这样的文件或目录
注意 | sed 's|^/||'` 去掉前导斜杠发现所以 tar 错误“删除前导斜杠不会发生。
【问题讨论】:
-
为什么根目录下有
tar?保存可执行文件的地方很奇怪。 -
在 crontab 中,命令行是 1 1 * * * /bin/tar 我在命令行中使用 #tar 进行测试,因为 /bin 在我的服务器的 PATH 环境变量中
标签: bash find crontab tar ubuntu-16.04