bash循环文件echo到目录中的每个文件

时间:2017-02-10 03:45:54

标签: linux bash shell unix

我搜索了一段时间并自己尝试了但是到目前为止无法对其进行排序。我的文件夹如下所示,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 

我想将每个时间戳插入每个文件。但有“模糊的重定向”错误。我做错了吗?感谢

2 个答案:

答案 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")"