【问题标题】:Write last modified time in filename [duplicate]在文件名中写入上次修改时间[重复]
【发布时间】:2015-11-28 22:32:45
【问题描述】:

我在一个文件夹中有多个 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

【问题讨论】:

  • 该列表只是一个任意列表,适用于 AIX 3.2。它不包括通常在 AIX 中可用的 sedawk。请找出您拥有的 AIX 版本,并列出 /bin 和 /usr/bin 中命令的基本名称。
  • 版本为 6.1 - sed 和 awk 可用

标签: file shell unix aix last-modified


【解决方案1】:

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

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

现在如果你有 GNU-date,你可以格式化它:

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

【讨论】:

  • istat 或 gdate 都不是 AIX 的标准配置(这是 OP 所要求的)。
  • 因为(至少)AIX5.2 /usr/bin/istat 是包 bos.rte.filesystem 的一部分;如果没有 gdate 格式化日期可能会很困难。当然安装 gfind 会是另一个好主意。
  • 如前所述,无论如何,它都是重复的。
  • 'gfind' 和 'gdate' 是我不能使用的命令 :-(
  • istat TEST_A.csv | grep 'Last modified' | cut -f2 效果很好。但是如何格式化日期并将其放在文件名前面?
【解决方案2】:

这应该可行。我在mv 之前留下了echo。如果它删除它 似乎做你想做的事。 (未在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-25
    • 2016-07-26
    • 2021-10-08
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    相关资源
    最近更新 更多