我想保留我在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
答案 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)
可以从终端直接运行的另一种尝试。
首先执行第一步,然后开始处理您的文件。
保留旧时间戳。
它从当前目录运行,排除所有隐藏文件,并将其保存到/tmp/files
中的临时文件中。您可以随时更改参数,但最好保留-printf '"%t" "%p"\n'
,因为后来的touch
命令会使用该参数。
find . ! -iname ".*" -printf '"%t" "%p"\n' -type f > /tmp/files
根据需要修改文件
现在创建一个文件,帮助您恢复时间戳:
while read line; do echo touch -a -d $line >> job.sh; done < /tmp/times
最后将旧日期应用于修改后的文件
sh job.sh
警告:适用于具有名称间距,特殊字符的文件,但是例如没有带有$
符号的文件和带有双倍空格的文件。