想要根据修改日期压缩文件

想要根据修改日期压缩文件

一份文件 (路径.dat)其中包含多个路径,需要在其中查找 15 天前的文件并将其压缩到具有修改日期的同一文件夹中。

路径.dat:- 在文件系统中包含多个路径(带有分隔符 ' | ' )

/docusr1/user01 | /docusr2/user02 | /home/user01

前任:-/docusr1/user01

-rwxrwxrwx. 1 docusr2 docusr2     0 Mar 30 10:52 vinay.txt
-rw-rw-r--. 1 docusr2 docusr2     0 Mar 30 10:52 sathish.txt
-rw-rw-r--. 1 docusr2 docusr2   625 Apr  2 10:57 demo1.xml
-rw-rw-r--. 1 docusr2 docusr2  4430 Apr  2 11:09 sample.xml
-rw-rw-r--. 1 docusr2 docusr2    48 Apr  2 14:04 20180402140454.log
-rw-rw-r--. 1 docusr2 docusr2    48 Apr  2 14:39 20180402143917.log
-rw-rw-r--. 1 docusr2 docusr2    39 Apr  2 14:41 20180402144159.log
-rw-rw-r--. 1 docusr2 docusr2    84 Apr  2 14:46 20180402144651.log
-rw-rw-r--. 1 docusr2 docusr2   279 Apr  2 14:48 archive.sh
-rw-rw-r--. 1 docusr2 docusr2    84 Apr  2 14:48 20180402144814.log
-rw-rw-r--. 1 docusr2 docusr2  1228 Apr  5 10:10 real.xml

搜索15天前的文件,需要以修改日期为zip文件名(存档文件)进行压缩

预期输出:-

20170330.zip  -> it should contain all file which are modified on 2017-03-30
20170402.zip
20170405.zip

答案1

find . -maxdepth 1 -mtime +15 -type f -printf "%TY%Tm%Td %p\n" | while read date name ; do zip $date $name; done

Ymd 格式的文件最后修改时间

要对所有下面的目录执行此操作,有不同的方法可以执行此操作,下面给出一些方法,请确保在查找中使用绝对路径,例如我使用"/home/user"

find /home/user -type d -print0 | while read -d '' -r dir; do cd "$dir" && pwd && find . -maxdepth 1 -mtime +15 -type f -printf "%TY%Tm%Td %p\n" | while read date name ; do zip $date $name; done; done

或者

find /home/user -type d -print0 | xargs -0 -I {} sh -c 'cd '\"{}\"' && pwd && find . -maxdepth 1 -mtime +15 -type f -printf "%TY%Tm%Td %p\n" | while read date name ; do zip $date $name; done'

答案2

您可以尝试以下操作:

while read zipfile files; do 
    zip ${zipfile}.zip $files
done <<< $(find -maxdepth 1 -type f | xargs stat -c "%y,%n" | awk -F, '{a[substr($1,1,10)]=a[substr($1,1,10)] " " $2} END{for(i in a){print i a[i]}}')

while循环需要具有以下格式的字符串:

zipfilename file1 file2 file3 ...

这是通过以下方式实现的

  • 获取当前目录的所有常规文件:find -maxdepth 1 -type f
  • 使用查看修改时间stat
  • 使用格式化结果awk,以便当天修改的所有文件都列在一行中

相关内容