如何快速自动获取vmdVIZU2文件路径并用于脚本?
自动查找文件路径并调用VMD的实现方案
问题描述
原本手动指定USB中文件路径调用VMD的命令如下:
vmd -e /media/user_name/KINGSTON/extra/vmdVIZU2 > /dev/null
希望自动查找vmdVIZU2文件的完整路径并保存到变量中,替代手动填写路径的操作,实现自动化调用。
实现方法
1. 基础单文件查找方案
如果确定系统中只有一个vmdVIZU2文件,可以直接用find命令的结果赋值给变量:
# 从当前目录开始递归查找文件,找到第一个匹配项就停止 file_path=$(find . -type f -name "vmdVIZU2" -print -quit) # 检查是否找到文件,再执行调用 if [ -n "$file_path" ]; then vmd -e "$file_path" > /dev/null else echo "错误:未找到vmdVIZU2文件" fi
-print -quit参数能让搜索找到第一个匹配文件就终止,提升效率- 用
-n判断变量是否非空,避免找不到文件时执行无效命令
2. 限定USB挂载目录搜索(更高效)
如果明确文件在USB挂载目录下(比如/media/user_name/),直接限定搜索范围,避免全局遍历浪费时间:
# 指定USB挂载根目录作为搜索起点 usb_mount="/media/user_name" file_path=$(find "$usb_mount" -type f -name "vmdVIZU2" -print -quit) if [ -n "$file_path" ]; then vmd -e "$file_path" > /dev/null else echo "错误:在USB目录下未找到vmdVIZU2文件" fi
3. 处理多文件匹配的情况
如果系统中存在多个同名文件,可以让用户选择要使用的路径:
# 收集所有匹配的文件路径 mapfile -t found_paths < <(find . -type f -name "vmdVIZU2") if [ ${#found_paths[@]} -eq 0 ]; then echo "错误:未找到vmdVIZU2文件" exit 1 elif [ ${#found_paths[@]} -eq 1 ]; then file_path="${found_paths[0]}" else echo "找到多个vmdVIZU2文件,请选择序号:" for i in "${!found_paths[@]}"; do echo "$((i+1)). ${found_paths[$i]}" done read -p "输入选择的序号:" choice # 验证输入合法性 if [[ "$choice" =~ ^[0-9]+$ ]] && [ "$choice" -ge 1 ] && [ "$choice" -le ${#found_paths[@]} ]; then file_path="${found_paths[$((choice-1))]}" else echo "无效选择,退出" exit 1 fi fi # 执行调用 vmd -e "$file_path" > /dev/null
内容的提问来源于stack exchange,提问作者James Starlight
相关产品推荐
相关产品推荐

