(pdksh)循环遍历n个文件并将其日期存储在数组中

时间:2015-06-02 11:03:37

标签: arrays shell scripting pdksh

使用 pdksh

stat()命令在系统上不可用。

我需要循环查找找到的文件数量并将其日期存储在数组中$COMMAND存储$location中找到的文件数量,如下所示。

有人能帮助我吗?

COMMAND=`find $location -type f | wc -l`
CMD_getDate=$(find $location -type f | xargs ls -lrt | awk '{print $6} {print $7}')

1 个答案:

答案 0 :(得分:0)

嗯,首先,您不需要执行wc。数组的大小将告诉你有多少。这是一个构建日期和名称数组的简单方法(专为pdksh设计;在AT& T ksh或bash中有更好的方法):

set -A files 
set -A dates
find "$location" -type f -ls |&
while read -p inum blocks symode links owner group size rest; do 
  set -A files "${files[@]}" "${rest##* }"
  set -A dates "${dates[@]}" "${rest% *}"
done

这是检查结果的一种方法:

print "Found ${#files[@]} files:"
let i=0
while (( i < ${#files[@]} )); do
  print "The file '${files[i]}' was modified on ${dates[i]}."
  let i+=1
done

这将为您提供完整的日期字符串,而不仅仅是月份和日期。这可能是您想要的 - ls -l(或find -ls)的日期输出可变,具体取决于文件修改的时间。鉴于这些文件,您的原始格式如何区分ab的修改时间?

$ ls -l
total 0
-rw-rw-r--+ 1 mjreed  staff  0 Feb  3  2014 a
-rw-rw-r--+ 1 mjreed  staff  0 Feb  3 04:05 b

如上所述,上面的代码会为location = .上面的目录产生这一点:

Found 2 files:
The file './a' was modified on Feb  3  2014.
The file './b' was modified on Feb  3 00:00.

如果您指出了实际的最终目标,那将会有所帮助。