获取按日期分组的文件列表

获取按日期分组的文件列表

我有一个目录,其中包含每天都会出现的文件。现在我想按日期分组这些文件。无论如何,是否可以对同一日期登陆的文件进行分组/列出。

假设目录中有以下文件

-rw-r--r--. 1 anirban anirban    1598 Oct 14 07:19 hello.txt
-rw-r--r--. 1 anirban anirban    1248 Oct 14 07:21 world.txt
-rw-rw-r--. 1 anirban anirban  659758 Oct 14 11:55 a
-rw-rw-r--. 1 anirban anirban    9121 Oct 18 07:37 b.csv
-rw-r--r--. 1 anirban anirban     196 Oct 20 08:46 go.xls
-rw-r--r--. 1 anirban anirban    1698 Oct 20 08:52 purge.sh
-rw-r--r--. 1 anirban anirban   47838 Oct 21 08:05 code.java
-rw-rw-r--. 1 anirban anirban 9446406 Oct 24 05:51 cron
-rw-rw-r--. 1 anirban anirban  532570 Oct 24 05:57 my.txt
drwxrwsr-x. 2 anirban anirban      67 Oct 25 05:05 look_around.py
-rw-rw-r--. 1 anirban anirban   44525 Oct 26 17:23 failed.log

因此,无法使用任何后缀/前缀对文件进行分组,因为所有文件都是唯一的。现在,当我运行我正在寻找的命令时,我将根据日期分组得到如下一组行。

[ [hello.txt world.txt a] [b.csv] [go.xls purge.sh] [code.java] ... ] and so on.

有了这个列表,我将循环浏览并存档

tar -zvcf Oct_14.tar.gz hello.txt world.txt a

答案1

对于zsh,使用关联数组,其键是日期,值是在该日期最后修改的文件的 NUL 分隔列表:

zmodload -F zsh/stat b:zstat
typeset -A files
for file (./*) {
  zstat -LA date -F %b_%d +mtime $file &&
    files[$date]+=$file$'\0'
}
for date (${(k)files})
  echo tar zcvf $date.tar.gz ${(0)files[$date]}

高兴的时候去掉echo

请注意,月份名称缩写(%bstrftime 格式)将采用当前区域设置的语言(Oct在英语系统、Okt德语系统等)。要始终使其为英文名称,无论用户的区域设置如何,请强制区域设置CLC_ALL=C zstat....

使用 GNU 工具,您可以执行以下操作:

find . ! -name . -prune ! -name '.*' -printf '%Tb_%Td:%p\0' |
  awk -v RS='\0' -F : -v q=\' '
    function quote(s) {
      gsub(q, q "\\" q q, s)
      return q s q
    }
    {
      date=$1
      sub(/[^:]*:/, "", $0)
      files[date] = files[date] " " quote($0)
    }
    END {
      for (date in files)
        print "tar zcvf " quote(date ".tar.gz") files[date]
    }'

高兴的时候就吹sh

答案2

while read date a b filename; do 
    zip -g ../$date.zip "$filename"
done <<< $(stat -c "%y %n" *)

答案3

可能我误解了这个问题,但是

ls -ls |grep '10 月 26 日' > oct26.list

将给出10月26日的文件列表;可以通过使用额外的 grep "| grep 09:" 等来完成相同的操作,例如几个小时。然后使用列表 oct26.list 执行您需要的任何操作。

相关内容