You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash Shell从目录中选取一个符合命名模板的文件并移动重命名到指定目录?

如何用Bash Shell从目录中选取一个符合命名模板的文件并移动重命名到指定目录?

当然有简洁的bash解决方案啦,完全没必要写Python脚本折腾!这里给你两种靠谱的思路,都是针对你的需求设计的——不管目录里有几个符合模板的文件,随便挑一个移动并重命名到/backup/teleporter.tar.gz。

方法一:用数组匹配(最安全可靠)

这种方法能避免文件名含特殊字符(比如空格)时出问题,是推荐的写法:

# 把所有符合命名模板的文件存入数组
target_files=(pi-hole-srv-teleporter_*.tar.gz)

# 检查数组里第一个元素是不是真实存在的文件(避免没有匹配到文件时出错)
if [[ -f "${target_files[0]}" ]]; then
    # 移动并重命名,如果目标文件已存在,加 -f 参数可以直接覆盖
    mv "${target_files[0]}" /backup/teleporter.tar.gz
    echo "搞定!已把 ${target_files[0]} 移动到 /backup/teleporter.tar.gz"
else
    echo "哦豁,没找到符合模板的文件呢"
fi

bash会默认按字典序排列数组里的文件,不过你说不在乎选哪一个,所以第一个就完全够用啦。

方法二:用管道快速筛选(适合简单场景)

如果你的文件名里没有空格这类特殊字符,也可以用更简洁的管道写法:

# 取第一个匹配的文件,然后移动
selected_file=$(ls pi-hole-srv-teleporter_*.tar.gz | head -n 1)
if [ -n "$selected_file" ]; then
    mv "$selected_file" /backup/teleporter.tar.gz
    echo "成功移动 $selected_file 到目标目录"
else
    echo "无匹配文件"
fi

不过要注意,文件名里有空格或者特殊字符时,ls的输出可能会被拆分,导致出错,所以还是优先用数组方法哦。

备注:内容来源于stack exchange,提问作者WoJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 08:38:17