求助:编写符合指定要求的mastertheLS文件目录列表命令行
满足需求的目录列表命令实现
正确命令
将以下命令写入mastertheLS文件即可实现所有需求:
find . -mindepth 1 -maxdepth 1 ! -name ".*" -exec sh -c ' for f do atime=$(stat -c "%X" "$f") [ -d "$f" ] && echo "$atime $f/" || echo "$atime $f" done' sh {} + | sort -k1,1nr | cut -d' ' -f2- | paste -sd ',' -
命令各部分说明
find . -mindepth 1 -maxdepth 1 ! -name ".*":遍历当前目录下的非隐藏文件/目录,自动跳过.和..-exec sh -c '...' sh {} +:批量处理找到的条目,避免逐个启动子进程提升效率atime=$(stat -c "%X" "$f"):获取条目的访问时间Unix时间戳,用于后续排序[ -d "$f" ] && echo "$atime $f/" || echo "$atime $f":判断条目是否为目录,是则在名称末尾加/,同时输出时间戳字段
sort -k1,1nr:按时间戳数值逆序排序,实现最新访问的条目排在最前cut -d' ' -f2-:移除开头的时间戳字段,只保留处理后的文件/目录名称paste -sd ',' -:将所有换行的条目合并为单行,用逗号分隔结果
原错误命令的问题
- 未按访问时间排序:原命令的
sort仅按字符串字典序排序,完全不涉及文件访问时间 - 输出格式不符:原命令每行输出一个条目,没有合并为逗号分隔的单行结果
- 效率低下:
-exec使用;会为每个条目单独启动子进程,批量处理应改用+以减少系统开销
内容的提问来源于stack exchange,提问作者Kulsarieff
相关产品推荐
相关产品推荐

