编辑文件

时间:2015-12-23 09:35:52

标签: linux bash shell date string-formatting

我想保留我在for循环中编辑的文件的时间戳

for files in $DIR/MDC*/$FILE
do
    # Need to get date here!
    dos2unix $files
    if grep -q $TYPE $files; then
        echo 'done'
    else
        sed -i "1s/^/$TYPE\n/" $files
    fi
    $DIR/crccalc/LDDR16.py $files
    # Use Date variable here to change it back

done

问题是我需要从文件中获取格式化的日期字符串,以便在循环完成后我可以touch -r将文件还原为日期。

stat并未向我提供我需要的格式。

必填格式:

YYMMDDhhmm

2 个答案:

答案 0 :(得分:4)

有一个很好的技巧:使用<! -.....- > <setup> <module>Damian_CmsUpdate</module> <class>Damian_CmsUpdate_Model_Resource_Mysql4_Setup</class> </setup> <! -......- > 。也就是说,使用另一个文件的时间戳作为参考来触摸文件。

来自touch -r reference_file

man touch

你可能会问:这对你有什么帮助?好吧,因为您可以创建一个虚拟文件 -r, --reference=FILE use this file's times instead of current time 来处理:

  • 在修改文件之前,请触摸dummy,其中包含您要修改的文件dummy的时间戳。
  • 您修改了original_file
  • 然后使用original_file的时间戳触摸original_file

所有在一起:

dummy

答案 1 :(得分:0)

可以从终端直接运行的另一种尝试。

首先执行第一步,然后开始处理您的文件。

  1. 保留旧时间戳。 它从当前目录运行,排除所有隐藏文件,并将其保存到/tmp/files中的临时文件中。您可以随时更改参数,但最好保留-printf '"%t" "%p"\n',因为后来的touch命令会使用该参数。

    find . ! -iname ".*" -printf '"%t" "%p"\n' -type f > /tmp/files

  2. 根据需要修改文件

  3. 现在创建一个文件,帮助您恢复时间戳:

    while read line; do echo touch -a -d $line >> job.sh; done < /tmp/times

  4. 最后将旧日期应用于修改后的文件

    sh job.sh

  5. 警告:适用于具有名称间距,特殊字符的文件,但是例如没有带有$符号的文件和带有双倍空格的文件。