我有两块硬盘,每块都装有 Ubuntu,当我在第一个硬盘中访问第二个硬盘时,目录具有很长的序列式名称,不允许快速使用别名cd
。
哪个命令可以让我获取此名称,以便我可以存储指向它的链接,并放入变量中以便可以在别名中使用它?当我在终端中打开该目录时,它看起来像:
my_user@my_user:/media/my_user/3d3f80f2-83ee-41f9-9d6e-7145b5fdb7dd1/home/$
但因为这个名字
3d3f80f2-83ee-41f9-9d6e-7145b5fdb7dd1
每次我重新启动或再次安装到该磁盘时都会发生变化,我希望能够执行以下操作:
alias = 'cd /media/my_user/${this_random_long_name}'
我尝试搜索这个名字是如何生成的,以及如何正式引用它,但我找不到答案。
答案1
简单的解决方案
这似乎是 XY 问题。由于您只有 2 个这样的磁盘,因此您无需知道驱动器的名称即可获得它。
瞧,你现在在第一个硬盘上,所以它被挂载在/
。你的另一个硬盘被挂载在/media/my_user/something
。因此, 下只有一个目录/media/my_user
。你可以使用通配符*
扩展到它:
cd /media/my_user/* # Enter that drive
cd /media/my_user/*/home # Enter a subfolder
要获取您想要的“快速 cd 别名”:
# Put the following in .bashrc:
alias cdthatdrive='cd /media/my_user/*'
# Then after relogging and opening a new terminal:
cdthatdrive # to use that alias
如果您仍然需要随机名称:
RANDOM_NAME="$(basename /media/my_user/*)"
alias cdthatdrive="cd /media/my_user/$RANDOM_NAME"
高级解决方案
如果上述简单解决方案足以满足您的使用情况,则优先选择它。只有当您遇到需要支持 3 个或更多驱动器时,您才可以使用更全面的解决方案:
udisksctl
与在现代 Linux 上安装磁盘的守护进程交互。GUI 或多或少调用了类似的东西,udisksctl mount -b /dev/sdb
只是使用 DBus。因此运行udisksctl dump
并按下/
以搜索驱动器当前安装的当前随机 ID,并查找/dev/disk/by-id/something-part1
上面“符号链接:”部分中的内容。然后使用一些 DBus 东西来反过来:
RANDOM_PATH="/dev/disk/by-id/something-part1" # If your ID is really changing, you can try using wildcard here together with the part (vendor, etc.) that doesn't change
RANDOM_PATH="$(readlink -f "$RANDOM_PATH")"
RANDOM_PATH="$(basename "$RANDOM_PATH")"
RANDOM_PATH="$(dbus-send --system --print-reply=literal --dest=org.freedesktop.UDisks2 /org/freedesktop/UDisks2/block_devices/"$RANDOM_PATH" org.freedesktop.DBus.Properties.Get string:org.freedesktop.UDisks2.Filesystem string:MountPoints)"
RANDOM_PATH="${RANDOM_PATH#*\"}"
RANDOM_PATH="${RANDOM_PATH%\"*}"
# Then you can cd:
cd "$RANDOM_PATH"