bash - Bash - 如何按文件名将最新文件复制到另一个文件夹?
问题描述
假设我在文件夹 Test1 中有这些文件
AAAA-12_21_2020.txt
AAAA-12_20_2020.txt
AAAA-12_19_2020.txt
BBB-12_21_2020.txt
BBB-12_20_2020.txt
BBB-12_19_2020.txt
我想要下面的最新文件到文件夹 Test2
AAAA-12_21_2020.txt
BBB-12_21_2020.txt
解决方案
此代码将起作用:
ls $1 -U | sort | cut -f 1 -d "-" | uniq | while read -r prefix; do
ls $1/$prefix-* | sort -t '_' -k3,3V -k1,1V -k2,2V | head -n 1
done
我们首先遍历指定为第一个参数的目录中的每个前缀,我们通过对文件列表进行排序并删除重复项来获得它,然后再提取之前的所有内容-
。_
然后我们使用 sort 选项按符号分隔的三个字段对这些文件名进行-k
排序(主要是在第三个字段中按年,然后在第二个字段中按月,最后是几天)。我们使用版本排序能够忽略周围的文本并正确解释数字(与字典排序相反)。
我不确定这是否是最好的方法,因为我只使用了基本的 bash 函数。由于日期格式和您必须区分前缀的事实,您必须完全解析字符串,这是更适合 AWK 或 Perl 的工作。
尽管如此,我还是建议对机器可读的文件名使用日-月-年或年-月-日格式。
推荐阅读
- css - 使用 CSS 将宽度设置为 100% 时,是否可以将高度设置为宽度的百分比
- java - 如何解决安装 Spring Book 项目后在 pom.xml 文件中出现的此错误?
- google-apps-script - 使用脚本将时间/日期数据从一个谷歌表导入另一个谷歌表时的时间/日期问题
- neo4j - 查询检查节点中的所有源状态是否已完成?
- regex - Data Studio Regex (Google RE2) 从路径中提取子目录
- mongodb - 按国家/地区划分的类型“戏剧”的电影数量
- python-3.x - 从熊猫列中提取特定值并将其存储在新列中
- bash - 变量 Bash 中的 nums(列)列表
- python-3.x - 即使相机工作,ROS ORB_SLAM2 /orb_slam2_mono/debug_image 也是空白的
- django - 如何在 Django、UWSGI 和 Kubernetes 的峰值负载下优化每秒请求数