Nuno Fonseca Asked: 2024-03-09 06:28:41 +0800 CST2024-03-09 06:28:41 +0800 CST 2024-03-09 06:28:41 +0800 CST 如何在不列出文件所属目录的情况下递归获取所有文件的列表并按字母顺序对文件列表进行排序? 772 我只能使用ls -a列出目录本身,或者使用ls -aR按目录排序的文件 files 2 个回答 Voted Best Answer steeldriver 2024-03-09T07:15:16+08:002024-03-09T07:15:16+08:00 您可以使用带有格式说明符的find命令来仅获取文件的基本名称。从:-printf%fman find %f Print the basename; the file's name with any leading di‐ rectories removed (only the last element). For /, the result is `/'. 例如 find . -type f -printf '%f\n' | sort 或(处理包含换行符的文件名) find . -type f -printf '%f\0' | sort -z | xargs -r0 -n1 要省略文件.本身,请添加-mindepth 2. 请注意,find默认情况下匹配隐藏文件,如果这就是您将-a标志添加到ls命令中的原因。 或者使用zsh print -rC1 -- **/*(.:t:on) 要在这种情况下包含隐藏文件,请设置 globdots 选项 ( setopt globdots),并在级别上省略文件,.将 glob 更改为*/**/*。 mchid 2024-03-09T06:52:32+08:002024-03-09T06:52:32+08:00 该find命令将递归列出所有文件和路径。 您可以使用此示例列出当前工作目录下的所有文件和目录: find . 要按字母顺序排序,您可以将输出通过管道传输到sort命令: find . | sort 这是另一个按字母顺序递归列出用户 HOME 目录下的所有文件和目录的示例: find ~/ | sort 或者,您可以使用该tree命令执行相同的操作,但以标准树结构显示: tree . 我想这里的优点是我们不需要通过管道传递命令来sort按字母顺序获取列表。缺点是文件名不会与路径一起列出,因此与find.
您可以使用带有格式说明符的
find
命令来仅获取文件的基本名称。从:-printf
%f
man find
例如
或(处理包含换行符的文件名)
要省略文件
.
本身,请添加-mindepth 2
. 请注意,find
默认情况下匹配隐藏文件,如果这就是您将-a
标志添加到ls
命令中的原因。或者使用
zsh
要在这种情况下包含隐藏文件,请设置 globdots 选项 (
setopt globdots
),并在级别上省略文件,.
将 glob 更改为*/**/*
。该
find
命令将递归列出所有文件和路径。您可以使用此示例列出当前工作目录下的所有文件和目录:
要按字母顺序排序,您可以将输出通过管道传输到
sort
命令:这是另一个按字母顺序递归列出用户 HOME 目录下的所有文件和目录的示例:
或者,您可以使用该
tree
命令执行相同的操作,但以标准树结构显示:我想这里的优点是我们不需要通过管道传递命令来
sort
按字母顺序获取列表。缺点是文件名不会与路径一起列出,因此与find
.