Linux:将变量读取为文件

时间:2016-05-14 13:52:42

标签: linux bash

我有一个名为A的目录,我想知道里面一个文件/目录的修改日期。这是我的代码

#!/bin/bash

find A | sort -d
var="$(head -2 | tail -1)"
echo "$var"
date -r $var '+%S'

这基本上就是我想要我的代码的方式,当我这样做时,它只显示我的目录A(查找命令)中的内容,回显不起作用,日期也没有。 我有一条消息说:日期+%s没有这种类型的文件或目录。

我已经看到了一些关于将变量用作文件的问题,但在我的情况下,我没有看到任何可能导致问题的问题(比如使用斜杠)。所以我想知道是否有问题。

1 个答案:

答案 0 :(得分:6)

find A | sort -d将已排序的文件列表打印到标准输出。

head -2 | tail -1使head等待来自标准输入的数据。

标准输入没有任何内容,我认为脚本应该永远挂起(?)

var可能是一个空字符串。所以echo打印一个空字符串(没有)和一个新行。

无论var中存储了什么,都无法在磁盘上找到文件名。这就是date生成此错误的原因。

尝试一下:

#!/bin/bash --

 var="$(find A | sort -d | head -2 | tail -1)"
 printf "%s " "$var"
 date -r "$var" '+%s'

find可以使用-printf%T打印文件的上次修改时间。

尝试一下:

find A -printf "%p %T@\n" | sort -d | awk 'NR==2{print ; quit}'

-printf "%p %T@\n":打印文件名+ (空格字符)+ last modification time of the file as seconds since Jan. 1, 1970, 00:00 GMT, with fractional part.

awk 'NR==2{print ; quit}仅打印第二行。

相关问题