覆盖修改后的时间戳

覆盖修改后的时间戳

我需要这样做,以便使用时间戳修改当前目录中的文件。它第一次工作正常,但是一旦我再次运行它,它就会向文件添加另一个时间戳。我需要一种方法来替换时间戳,而不仅仅是添加时间戳。

#!/bin/sh
IFS='
'

time=$(date)

for file in *
do
     mv $file "$file""$time"
done

我正在尝试考虑如何覆盖旧文件,但是因为名称在使用时间戳修改时会发生变化,所以我想不出办法。

答案1

您需要替换文件名中日期的当前部分,然后替换它。这是一个直接字符串操作活动,用于解析文件名的基本名称部分。如果没有关于当前命名约定的更多信息,除了关于做什么的通用方法之外,无法真正提供解决方案。

例子

假设文件已命名等等_..日期..

for file in *
do

  basefile=${file/_*//}
  mv "$file" "$basefile""$time"
done

这会砍掉之后的所有内容_,并将其存储在$basefile.

名称

$ echo "$file"
blah_Sun Oct 27 15:20:58 EDT 2013

$ echo ${file/_*//}
blah/

答案2

一种方法是将原始文件名保留在同一目录中的文件中,而不是在 for 循环中读取文件,您可以使用以下 while 循环来读取文件名并将时间戳添加到名称中:

while read file                                                                                                                                                                    
do                                                                                                                                                                                 
  mv $file$(date)                                                                                                                                                                  
done < "files.txt"

files.txt可以通过例如生成ls > files.txt,并且您必须在命令行上运行实际脚本或单独的脚本之前运行此命令,并且仅运行一次。

相关内容