如何用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
相关产品推荐
相关产品推荐

