如何以递归方式获取所有文件的列表,而不列出文件所属的目录并按字母顺序对文件列表进行排序?

如何以递归方式获取所有文件的列表,而不列出文件所属的目录并按字母顺序对文件列表进行排序?

我只能列出目录本身ls -a或按目录排序的文件ls -aR

答案1

您可以使用带有格式说明符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默认情况下匹配隐藏文件,如果这是您将标志添加-als命令的原因。


或者使用zsh

print -rC1 -- **/*(.:t:on)

在这种情况下,要包含隐藏文件,请设置 globdots 选项 ( setopt globdots),要省略该.级别的文件,请将 glob 更改为*/**/*

相关内容