出门在外,有时候需要快速处理一些设备上的数据,比如从相机导出照片、批量重命名文件,或者同步行程记录。如果你手头有一台装了ref="/tag/2028/" style="color:#B2A89E;font-weight:bold;">Ruby的笔记本,写个小脚本就能省下不少时间。关键就在于,如何让Ruby脚本顺畅地执行系统命令。
用反引号直接调用命令
最简单的方式就是用反引号。比如你想查看当前目录下的文件列表,可以直接这样写:
result = `ls -l`
puts result
这会把 ls -l 的输出结果存进变量 result,然后打印出来。适合一次性获取信息的场景,比如整理旅行照片前先看看目录结构。
使用 system 方法执行操作
如果只是想运行命令,不关心返回内容,system 更合适。比如自动创建一个存放每日行程的文件夹:
system('mkdir', 'trip_day_1')
这种方式执行完命令后返回 true 或 false,适合做“执行动作”类的任务,比如备份GPS轨迹文件到指定目录。
通过 exec 启动外部程序
当你希望Ruby脚本直接“变身”成另一个程序时,可以用 exec。比如脚本运行后直接打开文本编辑器写游记:
exec('nano', 'diary.md')
注意,exec 会终止当前Ruby进程,后续代码不再执行,所以一般放在脚本末尾。
动态拼接命令处理照片
假设你每天拍完照,想按日期重命名并移动到对应文件夹。可以写个脚本自动完成:
date = `date +%Y-%m-%d`.strip
folder = "photos_#{date}"
system('mkdir', folder) unless Dir.exist?(folder)
system("mvg *.jpg #{folder}/")
这里用到了命令替换和条件判断,实际使用时只需运行一次脚本,所有散乱的照片就归位了。
安全提醒:别随便执行用户输入
虽然这些方法很方便,但要小心命令注入。比如从环境变量或参数读取内容拼接命令时,最好做校验。不要写 `rm -rf #{user_input}` 这样的代码,万一输错,整个备份目录可能就没了。
在旅途中用Ruby跑个小工具,能把重复操作变成一键完成。掌握好系统命令的调用方式,效率提升是实实在在的。