Shell脚本,用于将每个文件的unix时间戳文件名转换为常规日期/时间
我有一个目录,其中包含一组具有以下格式的文件: .tar.gz 我想用一个简单的shell脚本转换所有这些脚本,并采用以下格式: YY_MM_DD_H_M_S.tar.gz 我知道这将通过date-d@实现,以便找到该时间戳的确切日期,它应该包含在更大的do while中,但我不知道如何替换实际的文件名(并应用于该目录中的所有文件) 提前谢谢Shell脚本,用于将每个文件的unix时间戳文件名转换为常规日期/时间,shell,Shell,我有一个目录,其中包含一组具有以下格式的文件: .tar.gz 我想用一个简单的shell脚本转换所有这些脚本,并采用以下格式: YY_MM_DD_H_M_S.tar.gz 我知道这将通过date-d@实现,以便找到该时间戳的确切日期,它应该包含在更大的do while中,但我不知道如何替换实际的文件名(并应用于该目录中的所有文件) 提前谢谢 $ x=$(date +%Y_%m_%d_%H_%M_%S) $ rename .tar.gz _${x}.tar.gz *.tar.gz 这将重命
$ x=$(date +%Y_%m_%d_%H_%M_%S)
$ rename .tar.gz _${x}.tar.gz *.tar.gz
这将重命名以下文件:
a.tar.gz
ez.tar.gz
到
事实上,我玩了一点,并进入了这个解决方案-可能不优雅,但它的工作:
#!/bin/bash
mkdir newfiles
for f in *.tar.gz
do
ustamp=$(echo "$f" | rev | cut -d"." -f3- | rev)
TIME=$(date -d @"$ustamp" '+%Y-%m-%d_%H:%M:%S')
cp $f newfiles/$TIME.tar.gz
rm "$f";
done
日期(文件的新名称)来自哪里?这是最后一次修改日期吗?嗨,Yossi,事实上,我想要的是文件上实际盖章(记录)的日期,而不是上次修改的日期。谢谢你的帮助。但是,我需要每个文件名上的每个unix时间戳来获得时间戳的实际值(即记录文件的实际日期)。因此,对于每个文件,date命令应该得到实际值(类似于“date-d@”)并且实际结果应该是每一轮的新文件名
#!/bin/bash
mkdir newfiles
for f in *.tar.gz
do
ustamp=$(echo "$f" | rev | cut -d"." -f3- | rev)
TIME=$(date -d @"$ustamp" '+%Y-%m-%d_%H:%M:%S')
cp $f newfiles/$TIME.tar.gz
rm "$f";
done