如何列出树中的所有文件(目录及其子目录)?
对于我的任务,我需要列出树中的所有文件(目录,其所有子目录,所有子目录等)。
我更喜欢在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:
- 使用搜索(Ctl-S)。
- 选中“在子目录中搜索”。
- 点击“搜索”。
- 搜索完成后,单击“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 /s
或tree /f
命令的超链接版本。
鹦鹉螺
- 在列表视图中启用扩展子文件夹
- 对于14.04和16.04,请参见此处
- 对于17.10和18.04,请参见此处
- 单击文件夹并按星号( *在小键盘上,或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
希望这可以帮助 !!