如何列出树中的所有文件(目录及其子目录)?

对于我的任务,我需要列出树中的所有文件(目录,其所有子目录,所有子目录等)。

我更喜欢在Nautilus或Krusader中看到它们,但命令行解决方案也很有趣(在这种情况下,我需要列出文件的全名,大小和修改时间)。

对你来说很方便。

sudo apt-get install tree 

使用tree filepath文件tree filepath列出文件。

 ls -alR 

这可能是最简单的方法。 我只是破解了一个查找脚本,让你有更多的控制权。

 find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n" 

您可以根据需要使用printf格式。 这为您提供了一个很好的机会,可以按照您需要的方式对事物进行格式化,如果您在另一个应用程序中使用输出,这是非常宝贵的。

更多: http : //linux.about.com/od/commands/l/blcmdl1_find.htm

为了更好的可读性,您可以通过column命令将其全部管道化,它将自动resize,以便它们排成一行。

 find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n" | column -t 

正如Oli回答的那样, find将允许您搜索整个目录树:

 find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n" # Where %TY will display the mod. time year as 4 digits # %Tm will display the mod. time month as 2 digits # %Td will display the mod. time day as 2 digits # %s displays the file size in bytes # %p displays the full path name of the file 

您可能还希望使用-type f选项将结果限制为仅文件。 如果要匹配文件模式,则需要-name-iname选项(区分大小写,不区分大小写匹配)。 阅读find的手册页 – 您可以使用大量选项来缩小/优化搜索。

另外,如果您希望将多个屏幕数据放回到您的身边,请记住将结果通过less

@Oli:+1我刚刚学到了新东西 – column 。 之前没有用过。

ls是在Ubuntu和其他Linux和Unix操作系统中列出文件的标准命令。 ls特别有用,因为你会发现它安装在你遇到过的每个Unix系统上。 默认情况下,运行此选项仅显示当前目录中的文件。

但是-R ‘是递归选项(注意大写R ,而不是r ),它也会显示所有子目录。

你也要求“细节” – 为此你需要-l标志(这是一个小写的L,而不是第一个)。 请注意,这会为您提供文件权限信息以及文件大小,时间/日期信息和文件名。

如果您还想显示隐藏文件/文件夹(相当于Nautilus中的Ctrl + H ),请添加-a ‘标志。

您可以将标志合并在一起,为您提供以下内容:

 ls -lR 

如果你在任何体面的文件夹上运行它,你会发现这会产生巨大的长输出,可以非常快速地向下滚动屏幕。 为了解决这个问题,你可以通过一个名为less的程序“管道” ls的输出(这个名称是类似的more的模仿,它是第一个但是有更多的function)。

 ls -lR | less 

这将允许您使用向上/向下箭头键和PageUp / Down以更舒适的速度通过输出。

使用Krusader:

  1. 使用搜索(Ctl-S)。
  2. 选中“在子目录中搜索”。
  3. 点击“搜索”。
  4. 搜索完成后,单击“Feed to listbox”。

这将允许您通过拖动到其他面板等处理整个批次。

Nautilus脚本怎么样?

 #!/bin/bash # # AUTHOR: (c) 2013 Glutanimate (https://askubuntu.com/users/81372) # NAME: DirTree 0.1 # DEPENDENCIES: zenity tree (install with sudo apt-get install zenity tree) # LICENSE: GNU GPL v3 (http://www.gnu.org/licenses/gpl.html) # # DESCRIPTION: Creates a directory tree at the current location. If you want you # can filter the output by a pattern (eg *.avi to only include avi # files). TITLE=DirTree # Get working directory WORKINGDIR="`python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' $NAUTILUS_SCRIPT_CURRENT_URI`" # Time and date TIME=$(date +"%Y-%m-%d_%H%M%S") # Filter pattern zenity --question --title "$TITLE" --text "Do you want to filter by a specific file pattern?" if [ "$?" = "1" ] then customtree="tree" else PATTERN=$(zenity --entry --title "$TITLE" --text="Please enter a file pattern (eg *.avi)") if [ -z "$PATTERN" ] then exit else customtree="tree -P $PATTERN" fi fi # Directory tree $customtree "$WORKINGDIR" > "$WORKINGDIR/directorytree_$TIME.txt" 

安装说明: 如何安装Nautilus脚本?

我专门为此创建了一个程序 – 目录快照 。
它以递归方式遍历目录,并在整齐结构的HTML文件中存储它遇到的所有文件和文件夹的名称和大小,这些文件的组织类似于输入目录。
换句话说,这可以被认为是dir /stree /f命令的超链接版本。

鹦鹉螺

  1. 在列表视图中启用扩展子文件夹
    • 对于14.04和16.04,请参见此处
    • 对于17.10和18.04,请参见此处
  2. 单击文件夹并按星号( *在小键盘上,或Shift + 8 )以展开一级子目录。 每次按星号,它都会扩展到下一个级别。
    • 来源: htorque的答案在这里 。

这也适用于尼莫。

你可以把它们放在你的.bashrc文件中

 function _get_tree(){ ls -alR | while read LINE; do echo $LINE | grep ":$" > /dev/null; if [ $? -eq 0 ]; then VAR=$(echo $LINE | grep ":$"| sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/' | tee /dev/tty); fi; echo $LINE | grep "^-" > /dev/null; if [ $? -eq 0 ]; then size=${#VAR}; for i in $(eval echo "{1..$size}"); do echo -n ' '; done; echo -n '..'; echo $LINE | cut -d ' ' -f9; fi; done; }; alias get_tree='_get_tree' 

现在,您可以在任何目录中使用get_tree命令,它将显示整个层次结构。

句法:

 $ get_tree 

样本输出:

  . ..test.sh |-2 ..123.log |---3 |-----4 |-5 |---6 

希望这可以帮助 !!