这是默认行为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}'