目录包含具有以下格式的目录:“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
的所有文件2018folder
20180201
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