如何按字母顺序递归列出文件,并且不显示专门显示文件夹名称的行?
例如,我可以使用以下命令获得以下输出tree --dirsfirst -fihan * -o filelist
:
00.-ScriptHookV [1.0.1737.0]
[128K] 00.-ScriptHookV [1.0.1737.0]/dinput8.dll*
[1.2M] 00.-ScriptHookV [1.0.1737.0]/ScriptHookV.dll*
01.-ScriptHookVDotNet [2.10.10]
[ 891] 01.-ScriptHookVDotNet [2.10.10]/LICENSE.txt*
[1.8K] 01.-ScriptHookVDotNet [2.10.10]/README.txt*
[1018K] 01.-ScriptHookVDotNet [2.10.10]/ScriptHookVDotNet2.dll*
[7.5K] 01.-ScriptHookVDotNet [2.10.10]/ScriptHookVDotNet2.pdb*
[ 92K] 01.-ScriptHookVDotNet [2.10.10]/ScriptHookVDotNet2.xml*
[ 34K] 01.-ScriptHookVDotNet [2.10.10]/ScriptHookVDotNet.asi*
02.-Heap Limit Adjuster [1.0.0]
[ 98K] 02.-Heap Limit Adjuster [1.0.0]/GTAV.HeapAdjuster.asi*
03.-OpenIV [3.1]
[132K] 03.-OpenIV [3.1]/OpenIV.asi*
04.-Enhanced Native Trainer [1.41 Update 1]
[ 15M] 04.-Enhanced Native Trainer [1.41 Update 1]/EnhancedNativeTrainer.asi*
[8.4K] 04.-Enhanced Native Trainer [1.41 Update 1]/ent-config.xml*
但我需要这种输出(不一定是文件大小):
[128K] 00.-ScriptHookV [1.0.1737.0]/dinput8.dll
[1.2M] 00.-ScriptHookV [1.0.1737.0]/ScriptHookV.dll
[ 891] 01.-ScriptHookVDotNet [2.10.10]/LICENSE.txt
[1.8K] 01.-ScriptHookVDotNet [2.10.10]/README.txt
[1018K] 01.-ScriptHookVDotNet [2.10.10]/ScriptHookVDotNet2.dll
[7.5K] 01.-ScriptHookVDotNet [2.10.10]/ScriptHookVDotNet2.pdb
[ 92K] 01.-ScriptHookVDotNet [2.10.10]/ScriptHookVDotNet2.xml
[ 34K] 01.-ScriptHookVDotNet [2.10.10]/ScriptHookVDotNet.asi
[ 98K] 02.-Heap Limit Adjuster [1.0.0]/GTAV.HeapAdjuster.asi
[132K] 03.-OpenIV [3.1]/OpenIV.asi
[ 15M] 04.-Enhanced Native Trainer [1.41 Update 1]/EnhancedNativeTrainer.asi
[8.4K] 04.-Enhanced Native Trainer [1.41 Update 1]/ent-config.xml
有什么建议么?
答案1
使用zsh
外壳:
print -C1 **/*(.DN)
对于zsh
shell,这会将给定的通配模式扩展为单个列的结果打印出来(这就是所做print -C1
的)。该模式扩展到当前目录中或当前目录下的**/*(.DN)
所有常规文件(不是目录等;这是 glob 限定符的作用)的路径名。(.)
默认情况下,这些将是按字典顺序排列的排序者。 glob限定符分别与 shell 中的设置和(DN)
具有相同的效果(即,它使模式匹配隐藏名称,并且如果它不匹配任何内容,也使其根本不扩展)。dotglob
nullglob
bash
除了(.)
列出常规文件之外,还可以用来(^/)
列出非目录。
在 中bash
,您可以执行类似的操作
shopt -s globstar dotglob nullglob
for pathname in **/*; do
[[ ! -d $pathname ]] && printf '%s\n' "$pathname"
done
它递归地打印所有非目录(包括隐藏文件)的按字典顺序排序的路径名。
答案2
应该非常便携:
find . -type f | sort
如果您的输入数据包含名称中带有换行符的文件,我相信这应该可以更好地处理它们(感谢 Kusalananda 指出这种可能的情况):
find . -type f -print0 | sort -z | tr '\0' '\n'
答案3
如果您想列出当前目录中所有子目录中的所有文件并按文件名排序,请使用 find 命令。
find . -type f -exec basename {} \; | sort