Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell脚本,用于将每个文件的unix时间戳文件名转换为常规日期/时间_Shell - Fatal编程技术网

Shell脚本,用于将每个文件的unix时间戳文件名转换为常规日期/时间

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 这将重命

我有一个目录,其中包含一组具有以下格式的文件:

.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
这将重命名以下文件:

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