简单的解决方案

简单的解决方案

我有两块硬盘,每块都装有 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"

相关内容