嗨,我正在寻找在 bash/sh 中创建一个可以执行以下操作的脚本
进入文件夹 然后循环遍历一组 img.xz 文件,如果找到其中一个指定的文件,则使用它来通知 unxz -c (img.xzfile) | dd of=/dev/mmcblk0 bs=4096 状态=进度
该文件夹至少包含 3-5 个 img.xz
我现在拥有的
#bin/bash
$img.xz
$img.xz2
cd /img/
if ./20240317-1928-postmarketOS-edge-i3wm-0.5-microsoft-surface-rt.img.xz -->$img.xz
then unxz -c $img.xz | dd of=/dev/mmcblk0 bs=4096 status=progress
else
./20240317-1346-postmarketOS-edge-mate-7-microsoft-surface-rt.img.xz --> $img.xz2
then unxz -c $img.xz2 | dd of=/dev/mmcblk0 bs=4096 status=progress
我不知道这是否有效 提出这样的问题,可以工作,甚至列出文件夹中的所有图像,并通过选择选项 1-5 要求女巫使用,将其放入变量中,并在 unxz -c (变量)| 中使用该变量。 dd of=/dev/mmcblk0 bs=4096 status=将镜像构建到设备中的 emmc 模块的进度
此脚本将从 USB 启动的实时 Linux 映像运行,图像位于 /img/ 文件夹中
您可以通过迭代文件夹中的
.img.xz
文件并向用户提供选项来选择要使用的图像来实现您的要求。这是一个执行此操作的脚本:
#!/bin/bash
# Change directory to the folder containing the .img.xz files
cd /img/ || exit
# Array to store available image files
img_files=()
# Find .img.xz files in the current directory
while IFS= read -r -d $'\0'; do
img_files+=("$REPLY")
done < <(find . -maxdepth 1 -type f -name "*.img.xz" -print0)
# Check if any image files were found
if [ ${#img_files[@]} -eq 0 ]; then
echo "No .img.xz files found in the /img/ folder."
exit 1
fi
echo "Available image files:"
for ((i=0; i<${#img_files[@]}; i++)); do
echo "$(($i+1)). ${img_files[$i]}"
done
# Prompt user to select an image file
read -rp "Enter the number corresponding to the image file you want to use: " selection
# Validate user input
if ! [[ "$selection" =~ ^[1-9]+$ ]] || ((selection < 1)) || ((selection > ${#img_files[@]})); then
echo "Invalid selection. Please enter a number between 1 and ${#img_files[@]}."
exit 1
fi
# Get the selected image file
selected_img="${img_files[$((selection - 1))]}"
# Extract and write the image to the /dev/mmcblk0 device
unxz -c "$selected_img" | dd of=/dev/mmcblk0 bs=4096 status=progress
echo "Image flashing complete."
这个脚本:
/img/
文件夹。.img.xz
文件。/dev/mmcblk0
和 unxz
将选定的图像文件提取并写入到 dd
设备。确保以适当的权限运行此脚本,并在写入
/dev/mmcblk0
设备时务必小心,因为它可能会覆盖数据。