2011-12-15 189 views
35

ls /home/user/new/*.txt打印该目录中的所有txt文件。然而它打印的输出如下:仅显示没有整个目录路径的文件名

[[email protected]]$ ls /home/user/new/*.txt 
/home/user/new/file1.txt /home/user/new/file2.txt /home/user/new/file3.txt 

等等。

我想不是从/home/user/new/目录运行ls命令因此我不得不放弃了完整的目录名,但我所要的输出是仅作为

[[email protected]]$ ls /home/user/new/*.txt 
file1.txt file2.txt file3.txt 

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

+0

什么操作系统?例如,OS X做你想要的东西。你确定ls不是别名吗? – 2011-12-15 10:46:00

回答

60

ls whateveryouwant | xargs -n 1 basename

为你做这项工作?

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

+0

是的,它工作。非常感谢你。 – Ashish 2011-12-15 11:48:10

+2

如果whateveryouwant指的是多个目录,你应该使用`ls -d`。 – 2016-02-22 06:01:30

7

有几种方法可以做到这一点。一会是这样的:

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

    ... whatever you want to do with the file here 
done 
4

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

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

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

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

一个比较难看的方法是:

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

一种假想方式来解决这个问题是通过使用两次 “REV” 和 “剪切”:

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

不需要Xargs和所有的ls就足够了。

ls -1 *.txt 

显示一行明智

0

只是希望对大家有所帮助的人老的问题似乎回来现在每一次,我总是在这里找到很好的提示。

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

我们使用的解决方案是:

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

(cd dir ; ls)

将在只输出文件名,目录。如果您想要每行一个,请使用ls -1

相关问题