在文件名中写下最后修改时间

时间:2015-09-03 07:41:15

标签: file shell unix aix last-modified

我在一个文件夹中有多个csv文件,我想将每个文件的最后修改时间添加到其文件名中。

例如:

Before       ->   After
TEST_A.csv   ->   2015-09-02 18:10:55 TEST_A.csv
TEST_B.csv   ->   2015-09-01 15:32:08 TEST_B.csv
TEST_C.csv   ->   2015-09-02 13:24:36 TEST_C.csv

我如何通过Unix shell脚本执行此操作? 问题是我必须在'AIX操作系统'(Unix)及其接口上执行它,即'stat'命令不受支持,因此必须使用ls -l命令完成。

我找到了一个AIX命令列表:http://www.staff.uni-giessen.de/~gcg7/unix_help/aix_commands

2 个答案:

答案 0 :(得分:0)

您可以使用/ usr / bin / istat程序:

DT="$(/usr/bin/istat . | grep 'Last modified' | cut -f2)"
echo $DT
Thu Nov 29 16:50:10 2007

现在,如果你有GNU日期,你可以格式化它:

gdate -d "$DT" '+%Y-%m-%d %H:%M:%S'
2007-11-29 16:50:10

编辑:如果你有gfind,请使用它:

gfind /unix -maxdepth 0 -printf '%TY-%Tm-%Td %TH:%TM:%TS\n'
2013-06-05 16:24:00

答案 1 :(得分:0)

这应该有效。我在echo之前离开mv。如果它删除它 似乎做你想要的。 (未在aix上测试)

for file in *.csv
do
    time=$(istat "$file" | awk '
        BEGIN{ split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",imth," ");
           for(m in imth)month[imth[m]] = m
        }
        /Last modified/{ m=$4; d=$5; t=$6; y=$7
              printf "%s-%02d-%02d %s\n",y,month[m],d,t
        }')
    echo mv "$file" "$time $file"
done