我需要这样做,以便使用时间戳修改当前目录中的文件。它第一次工作正常,但是一旦我再次运行它,它就会向文件添加另一个时间戳。我需要一种方法来替换时间戳,而不仅仅是添加时间戳。
#!/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
,并且您必须在命令行上运行实际脚本或单独的脚本之前运行此命令,并且仅运行一次。