我搜索了一段时间并自己尝试了但是到目前为止无法对其进行排序。我的文件夹如下所示,4个文件
1.txt, 2.txt, 3.txt, 4.txt, 5.txt, 6.txt
我想打印文件修改时间并在其中加上echo
时间戳
#!/bin/bash
thedate= `ls | xargs stat -s | grep -o "st_mtime=[0-9]*" | sed "s/st_mtime=//g"` #get file modified time
files= $(ls | grep -Ev '(5.txt|6.txt)$') #exclud 5 and 6 text file
for i in $thedate; do
echo $i >> $files
done
我想将每个时间戳插入每个文件。但有“模糊的重定向”错误。我做错了吗?感谢
答案 0 :(得分:1)
在这种情况下,files
是文件的“列表”,因此您可能希望添加另一个循环来逐个处理它们。
您的描述有点令人困惑但是,如果您打算将每个文件的最后修改日期附加到该文件,您可以执行以下操作:
for fspec in [1-4].txt ; do
stat -c %y ${fspec} >>${fspec}
done
注意我已使用stat -c %y
来获取修改时间,例如2017-02-09 12:21:22.848349503 +0800
- 我不确定您使用的stat
的变体是什么,但是我没有-s
选项。你仍然可以使用你的选项,你只需要确保它依次在每个文件上完成,可能就像(在上面的for
循环中):
stat -s ${fspec} | grep -o "st_mtime=[0-9]*" | sed "s/st_mtime=//g" >>${fspec}
答案 1 :(得分:1)
您无法像> $files
中那样将输出重定向到多个文件。
要处理多个文件,您需要以下内容:
#!/bin/bash
for f in ./[0-4].txt ; do
# get file modified time (in seconds)
thedate="$(stat --printf='%Y\n' "$f")"
echo "$thedate" >> "$f"
done
如果您希望人类可读的时间格式更改%Y
%y
:
thedate="$(stat --printf='%y\n' "$f")"