我有一个名为A的目录,我想知道里面一个文件/目录的修改日期。这是我的代码
#!/bin/bash
find A | sort -d
var="$(head -2 | tail -1)"
echo "$var"
date -r $var '+%S'
这基本上就是我想要我的代码的方式,当我这样做时,它只显示我的目录A(查找命令)中的内容,回显不起作用,日期也没有。 我有一条消息说:日期+%s没有这种类型的文件或目录。
我已经看到了一些关于将变量用作文件的问题,但在我的情况下,我没有看到任何可能导致问题的问题(比如使用斜杠)。所以我想知道是否有问题。
答案 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}
仅打印第二行。