如何通过终端Shell/脚本自动将文件重命名为含电脑序列号的格式
如何通过终端Shell/脚本自动将文件重命名为含电脑序列号的格式
当然可以实现!我来帮你一步步拆解怎么用单行命令或者脚本完成这个需求,刚好你已经知道怎么获取序列号了,接下来就是把这个值和文件名结合起来就行。
一、单行命令快速实现
针对你给出的具体文件路径,直接用这行命令就行:
SERIAL=$(sudo dmidecode -s system-serial-number) && mv /home/ladmin/Documents/ExampleFile123.txt "/home/ladmin/Documents/PCSerial_${SERIAL}_Example123.txt"
我给你解释下每个部分:
SERIAL=$(sudo dmidecode -s system-serial-number):把获取到的序列号存到名为SERIAL的变量里,这样后面方便调用&&:只有前面获取序列号的命令成功执行了,才会执行后面的重命名操作- 双引号包裹新文件名:防止序列号里有空格、特殊字符(比如
&、*)导致命令出错
如果你的需求是直接把文件名改成序列号(比如ABC123.txt),可以改成:
SERIAL=$(sudo dmidecode -s system-serial-number) && mv /home/ladmin/Documents/ExampleFile123.txt "/home/ladmin/Documents/${SERIAL}.txt"
二、通用脚本(适合批量或重复使用)
如果需要经常做这个操作,或者想处理不同的文件,可以写一个简单的脚本,灵活性更高:
- 先创建一个脚本文件,比如
rename_with_serial.sh,内容如下:
#!/bin/bash # 检查用户是否提供了文件路径 if [ $# -ne 1 ]; then echo "用法: $0 <需要重命名的文件路径>" exit 1 fi # 拆分文件的路径、名称和扩展名 FILE_PATH="$1" FILE_DIR=$(dirname "$FILE_PATH") FILE_FULL_NAME=$(basename "$FILE_PATH") FILE_EXT="${FILE_FULL_NAME##*.}" FILE_NAME="${FILE_FULL_NAME%.*}" # 获取电脑序列号 SERIAL=$(sudo dmidecode -s system-serial-number) if [ -z "$SERIAL" ]; then echo "哎呀,无法获取电脑序列号!请检查是否有sudo权限,或者你的设备是否支持通过dmidecode读取序列号" exit 1 fi # 生成新的文件名(这里用的是你例子里的前缀+序列号+原文件名格式,你可以按需修改) NEW_FILE_NAME="PCSerial_${SERIAL}_${FILE_NAME}.${FILE_EXT}" NEW_FILE_PATH="${FILE_DIR}/${NEW_FILE_NAME}" # 执行重命名 mv "$FILE_PATH" "$NEW_FILE_PATH" echo "搞定!文件已经重命名为: $NEW_FILE_PATH"
- 给脚本添加执行权限:
chmod +x rename_with_serial.sh
- 运行脚本(替换成你的文件路径):
./rename_with_serial.sh /home/ladmin/Documents/ExampleFile123.txt
注意事项
- 执行命令时会要求输入sudo密码,这是正常的,因为
dmidecode需要管理员权限才能读取硬件信息 - 部分设备(比如某些虚拟机、老款笔记本)可能无法通过
dmidecode获取序列号,这时候脚本会提示错误 - 如果序列号包含特殊字符,一定要用双引号包裹文件名变量,避免命令执行失败
备注:内容来源于stack exchange,提问作者user1737015
相关产品推荐
相关产品推荐

