免责声明:我是个新手,由于某些原因,我很难学会这个。根据我访问的网站的不同,语法似乎很不一样。
我有一个简单的包装脚本,我想测试一个文件是否是gzipped的,如果是的话,我要将该文件zcat到一个新的临时文件中,并在编辑器中打开它。下面是脚本的一部分:
if file $FILE | grep -q gzip
then
timestamp=$(date +"%D_%T")
$( zcat $FILE > tmp-$timestamp )
fi我收到一个错误:"tmp-10/19/15_15:16:41:没有这样的文件或目录“
我尝试删除命令替换语法,或者将tmp-$时间戳放在双引号中,然后得到相同的错误。如果我删除了-$timestamp部分,那么它似乎工作得很好。有人能告诉我这是怎么回事吗?我正在清理掉一些很简单的东西。
发布于 2015-10-19 19:35:26
tmp-10/19/15_15:16:41是指目录19中的一个名为15_15:16:41的文件,它是tmp-10的一个子目录。如果这些目录和子目录不存在,则不能写入它们。
取代:
timestamp=$(date +"%D_%T")通过以下方式:
timestamp=$(date +"%F_%T")这给出了没有/的日期。
作为这种格式的一个例子:
$ date +"%F_%T"
2015-10-19_12:37:05对于%F,一年比月份早,比一天早。这意味着您的文件将正确排序。对大多数人来说,这是相对于%D的一个重要优势。
修订脚本
您的脚本可以简化为:
if file "$file" | grep -q gzip
then
zcat "$file" > "tmp-$(date +"%F_%T")"
fi备注:
$file )应该始终以双引号表示.总有一天,有人会给你一个有空格的文件名,而你不希望这样做会导致你的脚本失败。$(...)不属于这里。它已经被移除了。https://stackoverflow.com/questions/33222364
复制相似问题