如何在shell脚本中获取指定文件夹下特定日期的纯文件名列表
解决方案
你之前的命令输出带路径的原因是:shell会先把带路径的通配符a/b/c/*2021-08-18*展开为带完整路径的文件名列表传递给ls,ls自然会输出完整路径。有多个简洁方案可以直接实现需求,不需要额外做复杂的裁剪处理:
方案1:子shell切换目录(最推荐,无额外依赖)
使用子shell执行cd操作,不会改变你当前的工作目录,输出直接就是不带路径的文件名:
(cd a/b/c && ls -1 *2021-08-18*) > filenames.txt
方案2:使用find命令指定输出格式
如果需要更灵活的筛选(比如同时过滤目录/隐藏文件),可以用find的格式化输出参数直接取文件名:
find a/b/c -type f -name "*2021-08-18*" -printf "%f\n" > filenames.txt
其中-type f表示只匹配普通文件,%f表示仅输出文件名本身。
方案3:对现有带路径的输出做轻量裁剪
如果不想调整原有的ls逻辑,可以用简单的命令裁剪掉路径前缀:
- 用awk处理:
ls -1 a/b/c/*2021-08-18* | awk -F '/' '{print $NF}' > filenames.txt
- 用basename批量处理:
ls -1 a/b/c/*2021-08-18* | xargs -n 1 basename > filenames.txt
内容的提问来源于stack exchange,提问作者pankajkumar
相关产品推荐
相关产品推荐

