我想生成硬盘分区的脚本
#!/bin/bash
# Check if blkid is installed
command -v blkid > /dev/null 2>&1 || { echo >&2 "blkid is required but not installed. Aborting."; exit 1; }
# Specify the output script file
output_script="create_partitions2.sh"
# Generate mkdir commands for hard disk partitions based on names and labels
echo "#!/bin/bash" > "$output_script"
echo "" >> "$output_script"
echo "# Auto-generated script to create directories for hard disk partitions" >> "$output_script"
echo "echo 'Creating directories for hard disk partitions...'" >> "$output_script"
# Use blkid to get information about partitions
blkid -o list | awk '{print $1 "/ " $3 }' | cut -d '/' -f 3-4 | cut -d '/' -f 1,2 | awk '{print " mkdir /media/" ($2=="(not" ? $1 : $2) }' >> "$output_script"
echo "echo 'Giving Permission to the Created Directories...'" >> "$output_script"
blkid -o list | awk '{print $1 "/ " $3 }' | cut -d '/' -f 3-4 | cut -d '/' -f 1,2 | awk '{print " chmod 777 /media/" ($2=="(not" ? $1 : $2) " -R" }' >> "$output_script"
echo "echo 'Mounting Partitions to the Created Directories...'" >> "$output_script"
blkid -o list | awk '{print $1 "/ " $3 }' | cut -d '/' -f 3-4 | cut -d '/' -f 1,2 | awk '{print " mount /dev/" $1 " /media/" ($2=="(not" ? $1 : $2) }' >> "$output_script"
echo "echo 'Directories created successfully.'" >> "$output_script"
# Make the script executable
chmod +x "$output_script"
它给了我前两行空行。我想删除这两行以及一行用于挂载分区的行。
答案1
提取分区名称的方法可能不一致,并且将包括loop
,,zram
...zswap
等设备,并且它会打印两行标题(这很可能就是您得到两行空行的原因)。
你可能想要使用更强大的工具(例如lsblk
)以便更多地控制输出,然后对其进行文本处理...我并不打算为您编写脚本,但您可以将其用作模板:
lsblk -e 7,11 -nlo TYPE,NAME |
awk '/part/ {print $2}' |
xargs -I {} bash -c 'echo mkdir /media/"$1"; echo mount /dev/"$1" /media/"$1"' bash {}
...输出的内容如下:
mkdir /media/sda1
mount /dev/sda1 /media/sda1
mkdir /media/sda2
mount /dev/sda2 /media/sda2
...或者lsblk
以固定数据结构的形式输出--json
,然后像下面这样进行解析:
lsblk -e 7,11 --json -nlo TYPE,NAME |
jq -r '.blockdevices[] | select(."type" == "part") | ."name"' |
xargs -I {} bash -c 'echo mkdir /media/"$1"; echo mount /dev/"$1" /media/"$1"' bash {}
...这将产生相同的结果。
注意通常/media
用于在每个用户名命名的子目录下为用户自动/手动挂载 udisks ...我理解您可能不期望用户名是sda1
或nvme*
,但如果您选择不同的目标父目录(例如)可能会更好/mnt
。