树命令在某些目录中不起作用

San*_*ven 6 command-line tree

我正在学习虚拟环境和项目。在观看视频时,我遇到了 'tree命令我安装了tree然后运行它。但它不适用于我硬盘的其他分区而不是/分区。

当我tree~/Documents 中使用时 ,我得到了想要的结果

$ tree -d    
.
??? Desktop
??? Fix ‘No WiFi Adapter Found’ for HP Laptops with Ubuntu 18.04 _ UbuntuHandbook_files

2 directories
Run Code Online (Sandbox Code Playgroud)

但是当我在其他分区使用它时,我得到

sandeep@sandeep-HP-Laptop-15q-ds0xxx:/media/sandeep/sandeep files$ tree -d
. [error opening dir]

0 directories
Run Code Online (Sandbox Code Playgroud)

Kul*_*lfy 8

TL; 博士

  1. 如果您想继续使用树的快照版本,

  2. 或者使用tree可以使用 APT 安装的deb 版本。


更长的版本:

每当挂载分区/可移动媒体时,目标点通常是/media/USER/UUID。但是根据Snap 的限制,Snap 应用程序不能保证访问当前用户之外的目录/文件$HOME,包括/media甚至/etc 等目录。来自zyga 的 帖子

  • $HOME用户的目录必须匹配/home/*。尚不支持其他目录。特别/home/subdir/user是也不支持。

  • 如果用户未登录,则用户的家不可用的任何安装尚不支持。这包括:

    • 安装使用 automount
    • ecryptfs 和类似技术,仅在用户登录时解密 $HOME 目录(或分区)

注意这里“不支持”并不意味着“不起作用”。有些事情可能不起作用,但有些事件序列可能会导致用户无法访问他们的数据。

但是,tree通过 APT 安装的可以访问那些(DEB 没有这样的限制)。因此,如果您需要tree在其他分区中工作,请tree使用 APT安装。为此,运行

sudo apt install tree
Run Code Online (Sandbox Code Playgroud)

或者将分区挂载到$HOME. 要挂载分区,您可以使用mountcommand 或 edit /etc/fstab

这不会在该文件夹中自动挂载分区。因此,如果您一次又一次地挂载和卸载分区,则需要重新运行该命令。

  • 如果编辑/etc/fstab

    • 获取 UUID 使用

      blkid /path/of/partition
      
      Run Code Online (Sandbox Code Playgroud)

      (替换/path/of/partition/为分区/设备路径,例如/dev/sda3)

    • 使用文本编辑器/etc/fstabsudo特权打开,例如nano并添加以下行:

      UUID Mount_point Partition_type
      
      Run Code Online (Sandbox Code Playgroud)

      其中 UUID 是从前面的命令中获取的,挂载点是~/Desktop/test(假设),分区类型是分区类型,例如 ntfs 或 ext4。

即使在 Nautilus 中轻按一下,这也会自动在给定的挂载点中挂载分区。

一旦你做到了,可以使用treesudo特权,因为这两个将挂载该分区sudo的权限,因此老板会root


l3x*_*l3x 8

我得到了同样的错误。这是我为解决它所做的:

$ sudo snap remove tree
$ rm -rf $HOME/tree
$ sudo apt-get install tree
$ exec -l $SHELL  # <= restart shell
Run Code Online (Sandbox Code Playgroud)

随着时间的推移,我发现snap会导致很多问题。

这只是一个例子。