在一行中包含空格的tar文件名crontab样式tar/find命令
当以下命令从crontab运行时,遇到文件名中带空格的文件时会发生tar错误。在一行中包含空格的tar文件名crontab样式tar/find命令
/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|^/||'`
OR
/tar -C/-zcvf /root/archive-of-files-with-spaces-in-filename.tar.gz `find /var/www/html -mmin -1450 | sed 's|^/||'`
相同的错误由焦油抛出。
如何重新编写该命令以允许将包含空格的文件名提供给tar而不会分解为不存在的目录名称?
样品与文件名产生的错误: “2016年12月15日名称的文件修复exportICS.php”
焦油:无功/网络/ html-calendar.northpawfamilycloud.xyz /页/ 2016-12- 15: 不能静:没有这样的文件或目录
焦油名:无法统计:没有这样的文件或目录
焦油文件:无法统计:没有这样的文件或目录
焦油修复:无法统计:没有这样的文件或目录
tar:exportICS.php:无法统计:没有这样的文件或目录
注意| SED的| ^/||''带斜线关闭发现这样焦油错误“消除导致不发生斜线
既然你正在做的唯一的过滤是从名字/var/www/html
下删除前导斜线,您可以使用单独tar
- 避免与find
无数的问题:
tar -C/-czvf /root/archive-of-files-with-spaces-in-filename.tar.gz var/www/html
给定目录,tar
备份目录的内容。如果您有/var/html
下的子目录,则您的存档可能是必要的两倍。这一个不会比必要的更大。
显然,find
命令包含选项。在这种情况下,你必须做的事情的其他方式:
(cd /; find var/www/html -type f -mmin -1450 -print0) |
tar -C/--null -T - --czvf /root/archive-of-files-with-spaces-in-filename.tar.gz
的cd /; find var/html
避免了find
斜线开头。 -print0
使用空终止符作为文件名。 --null
告知tar
预期文件名以空终止; -T -
表示从标准输入中读取文件名列表。
如果您愿意,您可以将所有这些放在一行上。这不是我做这件事的方式。我将创建一个脚本,该脚本将由执行该任务的cron
(crontab
)系统运行,尤其是如果我运行它的话,输出文件名将不可避免地带有时间戳,并且可能会识别哪个站点被备份备份等。要备份的站点将作为crontab
条目提供的脚本的参数。这是我的偏好;有很多人在他们的crontab
文件中写入很长的一行。
此外,GNU tar
(吵闹)省略从压缩文件名的斜线,以便有由GNU tar
产生tar
文件中从来没有绝对名称:
tar: Removing leading `/' from member names
这意味着你能避免子外壳,只需使用find /var/www/html …
生成名称,并附带警告消息。既然你有详细的输出,这不太可能是一个问题。
存档用空格:
逃生空间用反斜杠或引用的文件名示例。 :
tar czvf /my/path/filename\ with\ spaces.tgz files...
如果要归档的文件的名称中空间:
使用find ... -print0
与NUL分隔的文件名L tar ... --null
只考虑NULL终止的文件。从GNU tar documentation:
find /path ... -print0 | tar ... --null -T -
为什么你在根目录下有'tar'?这是一个奇怪的地方,保持一个可执行文件。 –
在crontab中的命令行是1 1 * * */bin/tar我在命令行测试#tar为/ bin在我的服务器的PATH环境变量中 – ml48603