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

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 

等等。

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

 [me@comp]$ ls /home/user/new/*.txt file1.txt file2.txt file3.txt 

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

ls whateveryouwant | xargs -n 1 basename

那对你有用吗?

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

没有Xargs和所有的需要,绰绰有余。

 ls -1 *.txt 

显示行明智

有几种方法可以实现这一点。 其中一个会是这样的:

 for filepath in /path/to/dir/* do filename=$(basename $file) ... whatever you want to do with the file here done 

你可以添加一个sed脚本到你的命令行中:

 ls /home/user/new/*.txt | sed -r 's/^.+\///' 

解决这个问题的一个奇特的方法是使用两次“rev”和“cut”:

 find ./ -name "*.txt" | rev | cut -d '/' -f1 | rev 

我更喜欢已经由fge回答的基本名称。 另一种方法是:

 ls /home/user/new/*.txt|awk -F"/" '{print $NF}' 

更难看的一个方法是:

 ls /home/user/new/*.txt| perl -pe 's/\//\n/g'|tail -1 

(cd dir ; ls)

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

只是希望对某人有所帮助,因为旧的问题似乎不时回来,我总是在这里找到好的提示。

我的问题是在文本文件中列出某个目录中“* .txt”文件的所有名称,没有路径,也没有Datastage 7.5序列的扩展名。

我们使用的解决方案是:

 ls /home/user/new/*.txt | xargs -n 1 basename | cut -d '.' -f1 > name_list.txt