我相信我会问两个单独的问题,但上下文是相同的,所以我希望没问题。
我有几个进程的输出,如下所示(我无法修改)。
25978.csv
26044.csv
26865.csv
26914.csv
27013.csv
我试图通过此输入实现的是将日期插入文件名或替换该文件名的“简单操作”。所需日期通常对应于上次修改日期,因此可以使用for f in *.csv; do mv -- "$f" "$f-$(date +%Y%m%d -r "${f}")"; done
并重命名 oneliner。有时最后修改日期与我要查找的日期相差一天,所以我想知道是否有一种简单的方法(oneliner?)来减少该数值(例如将 20160506 转换为 20160505)?
20150506.csv
20150507.csv
20150508.csv
20150509.csv
20150510.csv
第二个案例。上次修改日期没有用,因为它完全不正确。但文件名中的数字随着预期日期而增加。我可以在文件名中插入一些数值,并为每个后续文件将相同的值加一吗?你明白我想要实现什么目标吗?我只是不知道怎么办;)...
编辑 我找到了我的问题的答案这里- 有点...也许我只是不能使用它?
cnt=0
for i in *; do
let cnt=cnt+1
mv "$i" "$(echo "${i}_${cnt}" | awk -F_ '{print $1"_"$3}')"
done
我知道如何根据我的需要修改它,但最终所有文件的输出都是相同的,例如“增量不起作用”。我已将上面的代码保存为rename.sh
并记得允许其执行chmod 755 rename.sh
,但我仍然什么也没想到......
答案1
我希望回答我自己的问题不会构成犯罪。我找到了部分解决方案询问Ubuntu- 对我有用,至少在第一种情况下。
touch -d "$(date -R -r filename) - 2 hours" filename
要修改子文件夹中的所有文件,请键入:
find DIRECTORY -print | while read filename; do
# do whatever you want with the file
touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done