使用 Ubuntu 20.04.4
GNU bash,版本 5.1.16(1)-release(x86_64-pc-linux-gnu)
在 bash 脚本中,如何声明
像 (/home/u3/Music/x) 这样的目录并获取:
- 分区类型和
- 上述目录的该驱动器的文件系统是否已发布到屏幕上?
脚本中提供了一个目录,用于比较两个目录。
以下是 4 个示例目录:
src1='/media/u3/F_4GB_FAT32' # usb 驱动器 F 4GBytes Fat32 文件系统
src1='/media/u3/s_931GBNmbr/1' # Sata HDD 驱动器 931 GB,Ntfs 文件系统,主引导记录
src1='/media/u3/u7451GBGPTn/z1' # usb 7451GB = 8TB,GPT 分区,Ntfs 文件系统
src1='/home/u3/Music/x' # SDD ubuntu 驱动器
src1 是源目录,
dest 是目标目录
取得了一些成功:
lsblk -o pttype,mountpoint,LABEL,TRAN,SIZE,FSUSE%,fstype,kname,path | head -n1 ;
lsblk -o pttype,mountpoint,LABEL,TRAN,SIZE,FSUSE%,fstype,kname,path | grep '/media/u3/s_931GBmbrN' ;
给予:
PTTYPE MOUNTPOINT LABEL TRAN SIZE FSUSE% FSTYPE KNAME PATH
dos /media/u3/s_931GBmbrN s_931GBmbrN 931.5G 46% ntfs sdc1 /dev/sdc1
dos = mbr = MBR = 主引导记录分区类型和
ntfs = 文件系统类型,新技术文件系统
但是当目录是其他目录时,上述命令很容易中断,例如:
/home/u3/Music/x
因为
grep '/home/u3/Music/x'
结果为空白,没有结果。
在 bash 脚本中,如何声明
像 (/home/u3/Music/x) 这样的目录并获取:
- 分区类型和
上述目录的驱动器的文件系统
?
--
答案1
使用findmnt
,取决于你想要什么:
findmnt -nfo FSTYPE -T /home/u3/Music/x
findmnt -nfo SOURCE -T /home/u3/Music/x
findmnt -nfo TARGET -T /home/u3/Music/x
findmnt -nfo FSTYPE,SOURCE,TARGET -T /home/u3/Music/x
您可以从中获得更多信息findmnt
。阅读man 8 findmnt
和findmnt --help
。
您可以从以下网址获取一些信息stat
:
stat -fc %T /home/u3/Music/x
stat -c %m /home/u3/Music/x
请man 1 stat
参阅详情。
例子:
file=/home/u3/Music/x
device="$(findmnt -nvfo SOURCE -T "$file")"
# information obtained, now we can use it
[ "$device" ] && lsblk "$device"
[ "$device" ] && df -h "$device"
[ "$device" ] && sudo file -s "$device"
答案2
除了上述答案之外......
bash 脚本所需输出的示例:
- 分区类型和
目录的文件系统
/home/u3/Music/x
使用卡米尔的答案:
file=/home/u3/Music/x ; device="$(findmnt -nvfo SOURCE -T "$file")" ;
简短脚本:
[ "$device" ] && lsblk -o PTTYPE,FSTYPE "$device" ; echo "$file" ;
屏幕答案:
PTTYPE FSTYPE
dos ext4
/home/u3/Music/x
更长的脚本:
[ "$device" ] && lsblk -o PTTYPE,FSTYPE,PATH,NAME,MODEL,SIZE,FSAVAIL,FSUSED,FSUSE%,LABEL,MOUNTPOINT "$device" ; echo "$file" ;
屏幕:
PTTYPE FSTYPE PATH NAME MODEL SIZE FSAVAIL FSUSED FSUSE% LABEL MOUNTPOINT
dos ext4 /dev/sda5 sda5 111.3G 58.6G 44.9G 41% /
/home/u3/Music/x
注意,结果与
stat -fc %T /home/u3/Music/x
ext2/ext3
因为这表示文件系统ext4
不是ext2/ext3
[ "$device" ] && lsblk -o FSTYPE "$device" ; echo "$file" ;
FSTYPE
ext4
/home/u3/Music/x
。
发布新问题?还是留在这里?
8000GB = 8TB USB 驱动器说:
file=/media/u3/u7451GBGPTn ; device="$(findmnt -nvfo SOURCE -T "$file")" ; [ "$device" ] && lsblk -o PTTYPE,FSTYPE "$device" ;
PTTYPE FSTYPE
atari ntfs
没有外部来源(网页)...
我们如何才能在 bash 脚本中阐明
atari
PTTYPE(分区类型)的含义
gpt
?
GPT = Guid 分区表,
Guid = 全局唯一标识符
--
答案3
使用 Kamil 的答案......
目录的分区类型状态的一行输出/home/u3/Music/x
:
src1='/home/u3/Music/x' ; clear ; echo " one line PTTYPE status (Partition Type): " ; tput sgr0 ; device="$(findmnt -nvfo SOURCE -T "$src1")" ; [ "$device" ] && lsblk -o PTTYPE "$device" | paste -sd ' ' | tr '\n' ' ' ; tput setaf 12 ; echo "$src1" ;
屏幕:
PTTYPE dos /home/u3/Music/x
以及
目录的文件系统状态的一行输出/home/u3/Music/x
:
src1='/home/u3/Music/x' ; clear ; echo " one line FSTYPE status (File System): " ; tput sgr0 ; device="$(findmnt -nvfo SOURCE -T "$src1")" ; [ "$device" ] && lsblk -o FSTYPE "$device" | paste -sd ' ' | tr '\n' ' ' ; tput setaf 12 ; echo "$src1" ;
屏幕:
FSTYPE ext4 /home/u3/Music/x
使用粘贴命令,将两行合并为一行
u3 = user3
src1=源目录,发送目录。
--