告诉“ls”仅打印基本文件名

告诉“ls”仅打印基本文件名

这是默认行为ls

ls /net/nas/data/languages/pypm/sites/rex/free/2.6/*/pool/v/vi/virtual*1.4.4*pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/linux-x86/pool/v/vi/virtualenv-1.4.4_linux-x86_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/linux-x86_64/pool/v/vi/virtualenv-1.4.4_linux-x86_64_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/macosx/pool/v/vi/virtualenv-1.4.4_macosx_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/win32-x86/pool/v/vi/virtualenv-1.4.4_win32-x86_2.6_1.pypm

我如何ls只打印基本名称?例如:

ls $OPTIONS /net/nas/data/languages/pypm/sites/rex/free/2.6/*/pool/v/vi/virtual*1.4.4*pypm
virtualenv-1.4.4_linux-x86_2.6_1.pypm
virtualenv-1.4.4_linux-x86_64_2.6_1.pypm
virtualenv-1.4.4_macosx_2.6_1.pypm
virtualenv-1.4.4_win32-x86_2.6_1.pypm

笔记:我更喜欢使用 shell 通配符,find因为 /net/nas/data/languages/pypm/sites/rex/free 包含大量文件和目录。

答案1

虽然xargs -0旨在用于以 \0 分隔的输入(如find -print0),ls但没有这样的选项以这种方式分隔其输出。

然而,

ls -1 /path/glob | tr '\n' '\0' | xargs -0 -n 1 basename

可以将换行符转换为空值。这样 xargs 就可以处理带有空格的名称。

编辑:添加-n 1到 xargs

答案2

我用的是这个:

ls | tr '\n' '\n'

它给出了如下列表:

file1.mp3
file2.mp3
file3.mp3
...

答案3

两个都GNU 基本名称FreeBSD 基本名称接受一个-a参数,允许您将多个路径传递给命令。这非常适合 shell 通配符。

basename -a /path/glob*

答案4

awk解决方案:

ls -1 /path/glob | awk -F'/' '{print $NF}'

相关内容