仅显示没有整个目录路径的文件名

Ash*_*ish 62 unix directory shell ls

ls /home/user/new/*.txt打印该目录中的所有txt文件.但是它打印输出如下:

[me@comp]$ ls /home/user/new/*.txt
/home/user/new/file1.txt    /home/user/new/file2.txt    /home/user/new/file3.txt
Run Code Online (Sandbox Code Playgroud)

等等.

我想运行ls命令不是从/home/user/new/目录运行,因此我必须提供完整的目录名称,但我希望输出只作为

[me@comp]$ ls /home/user/new/*.txt
file1.txt    file2.txt    file3.txt 
Run Code Online (Sandbox Code Playgroud)

我不想要整个路径.只需要文件名.这个问题必须使用ls命令解决,因为它的输出是针对另一个程序的.

fge*_*fge 102

ls whateveryouwant | xargs -n 1 basename

那对你有用吗?

否则你可以(cd /the/directory && ls)(是的,圆括号)

  • 请注意,如果路径包含空格,则xargs将断开它们.你需要使用`xargs -d'\n'-n 1`代替. (7认同)
  • 如果`whateveryouwant`引用多个目录,你应该使用`ls -d`. (3认同)

小智 37

不需要Xargs和所有,ls绰绰有余.

ls -1 *.txt
Run Code Online (Sandbox Code Playgroud)

显示行

  • 如果您仔细阅读OP,这是不正确的.这仅适用于您在该目录中的情况. (19认同)
  • 完美运行!谢谢@VRVigneshwara!`ls -1 bin/` 在 Linux Debian 上列出 bin/ 目录中没有路径的条目。 (3认同)

pgl*_*pgl 10

有几种方法可以实现这一目标.一个是这样的:

for filepath in /path/to/dir/*
do
    filename=$(basename $file)

    ... whatever you want to do with the file here
done
Run Code Online (Sandbox Code Playgroud)


小智 10

使用basename命令:

basename /home/user/new/*.txt
Run Code Online (Sandbox Code Playgroud)


小智 9

(cd dir ; ls)

只会在dir中输出文件名.ls -1如果您想要每行一个,请使用.


Joh*_*pel 8

解决它的一种奇特方法是使用两次“rev”和“cut”:

find ./ -name "*.txt" | rev | cut -d '/' -f1 | rev
Run Code Online (Sandbox Code Playgroud)


Add*_*son 6

所选的答案对我不起作用,因为我的文件名中有空格、引号和其他奇怪的字符。要引用 的输入basename,您应该使用:

ls /path/to/my/directory | xargs -n1 -I{} basename "{}"
Run Code Online (Sandbox Code Playgroud)

无论文件被称为什么,这都保证可以工作。


zul*_*loo 5

您可以在命令行中添加sed脚本:

ls /home/user/new/*.txt | sed -r 's/^.+\///'
Run Code Online (Sandbox Code Playgroud)