如何复制目录下最新的abc_前缀文件?解决cp命令通配符报错
复制最新abc_前缀文件的解决方法
要实现仅复制/location1目录下最新的abc_前缀文件到/location/xyz_,可以用以下几种可靠的方法:
方法一:用ls排序取最新文件
利用ls -t按修改时间从新到旧排序文件,再通过head -n1获取最新的那个,最后执行复制:
cp "$(ls -t /location1/abc_* | head -n1)" /location/xyz_
ls -t:按文件修改时间降序排列(最新的在前)head -n1:提取排序后的第一个文件- 用双引号包裹命令结果,避免文件名包含空格、特殊字符时出错
方法二:用find命令(更稳定)
如果需要处理包含特殊字符的文件名,或者想更精准控制搜索范围,用find命令更可靠:
cp "$(find /location1 -maxdepth 1 -type f -name 'abc_*' -printf '%T@ %p\n' | sort -nr | head -n1 | awk '{print $2}')" /location/xyz_
-maxdepth 1:限制仅搜索/location1目录本身,不递归子目录-type f:只匹配文件(排除目录)-printf '%T@ %p\n':输出文件的修改时间戳(秒级)和完整路径sort -nr:按时间戳逆序排序(最新的在前)awk '{print $2}':提取排序后的文件路径
额外优化:处理无匹配文件的情况
如果目录下没有abc_前缀的文件,上面的命令会报错,可以加个判断逻辑避免:
latest_file=$(ls -t /location1/abc_* 2>/dev/null | head -n1) if [ -n "$latest_file" ]; then cp "$latest_file" /location/xyz_ else echo "未找到任何abc_前缀的文件" fi
2>/dev/null:把ls的错误输出(比如无匹配文件时的提示)丢弃-n "$latest_file":检查变量是否非空,确保找到文件后再执行复制
内容的提问来源于stack exchange,提问作者Another Mailbox
相关产品推荐
相关产品推荐

