我正在寻找有关命令的帮助。我有一个很大的文件目录。我想做的就是对这些进行更好的排序。
例如,我想查看我有多少个具有唯一年份的文件和目录(所以我想我最终会得到一系列年份的输出)。
我一直在尝试通过列表ls -l
添加,grep
但ls -l | grep -c
它是吸引我的独特日期。
有人帮忙吗?
答案1
尝试使用:
ls -l --time-style=long-iso | grep -c ' 2017-'
将 2017 替换为您想要的任何 4 位数年份。该--time-style
选项将导致 ls 打印ISO 8601时间戳而不是默认情况下简短、模糊的人类可读的内容。然后,传递给 grep 的表达式将与时间戳开头的年份相匹配,并且应该只提取当年修改的文件的行(前提是您没有以这四位数字开头,后跟破折号的文件名)。
请注意,这可能只适用于 GNU 实现ls
(我知道它不适用于 busybox、FreeBSD、NetBSD 或 MINIX 实现,而且我很确定它不适用于 Solaris 实现)任何一个)。
根据评论中的要求,可以使用以下(又长又复杂的)命令来获取所代表的各个年份的数量:
ls -l --time-style=long-iso | tail +2 | sed -n 's/ */ /gp' - | cut -d ' ' -f 6 | cut -d '-' -f 1 | sort -u | wc -l
tail 命令删除显示总计的第一行(无用)。 sed 命令将连续空格折叠为单个空格。第一个 cut 命令提取年-月日字段,第二个命令仅提取年份,然后 sort 命令将其缩减为每年的一个实例,而 wc 命令最终输出数字。