使用 grep 或 find 获取 2018 年创建的所有带有“log”扩展名的文件

使用 grep 或 find 获取 2018 年创建的所有带有“log”扩展名的文件

目录包含具有以下格式的目录:“20180201”。

我想获取 2018 年创建的所有带有“log”扩展名的文件的列表及其大小。

有人能给我解释一下吗?

答案1

格式«20180201»似乎与此任务无关 - 除非要求您使用文件的名称而不是文件系统元数据来确定其年龄。

如果您想按文件的实际年龄(修改时间)查找文件,可以使用以下命令find,例如:

find /var/log -newermt 2018-01-01 ! -newermt 2019-01-01 -name '*.log' -exec du -h {} +

替换/var/log为您要搜索的起始目录。

man find

   -newerXY reference
          Succeeds if timestamp X of the file being  considered  is  newer
          than  timestamp  Y  of the file reference.   The letters X and Y
          can be any of the following letters:

          a   The access time of the file reference
          B   The birth time of the file reference
          c   The inode status change time of reference
          m   The modification time of the file reference
          t   reference is interpreted directly as a time

答案2

这不是一个好的解决方案,但希望它能够有所帮助。

for l in "$(ls -ailh $(find 2018folder/* -iname "*.log" | grep 20180201))"
do echo "$l\n" | \
     sed -n 's/  */ /gp' | \
     cut -d" " -f6,10-14 | \
     sed -n 's/ /\t/gp'
done
  • find 2018folder/* -iname "*.log"将找到应该包含类似文件夹.log的所有文件2018folder20180201
  • ls -ailh将显示其尺寸以及其他不需要的信息
  • sed -n 's/ */ /gp'将删除双空格
  • cut -d" " -f6,10-14仅留下文件的大小和路径
  • sed -n 's/ /\t/gp'将用制表符替换空格以获得更好的外观。

如果您只需要文件大小及其名称而不需要路径:

for l in "$(ls -ailh $(find 2018folder/* -iname "*.log" | grep 20180201))";
do echo "$l\n" | \
   sed -n 's/  */ /gp' | \
   cut -d" " -f6,10-14 | \
   sed -n 's/ /\t/gp' | \
   cut -d/ -f1,3 | \         # leave only 1st and 3rd columns using `/` as delimiter
   sed 's/2018folder\///';   # remove `2018folder/` from output
done

相关内容