我想要一个非当前目录下文件的简单列表。我运行ls /other/directory/*.txt
并得到:
/其他/目录/file1.txt /其他/目录/file2.txt
我想:
文件1.txt 文件2.txt
我怎样才能获得第二个列表?
答案1
(cd /other/directory && ls)
答案2
有什么原因导致您无法使用ls -1
?
$ ls -1 /other/directory
file1
file2
编辑:
我注意到你现在改变了问题——我的解决方案不适用于你的新示例ls /other/directory/*.txt
。使用类似哈奇克的解决方案,例如
$ (cd /other/directory && ls -1 *.txt)
答案3
ls -1 /other/directory/*.txt |xargs basename
-1
每行将列出一个文件,仅包含文件名(或路径)- 使用通配符和/或提供
ls
完整路径将输出每个文件的完整绝对路径。basename
将删除路径,仅留下文件名。
答案4
1)我不确定这是否应该出现在 superuser.com 上
2) ls 无论如何都不会打印完整路径:ls -1 /your/dir
编辑问题已更改。根据 Paul 在下面的评论,我正在更新我的答案。您可以这样做:
ls -1 /home/rich/*.txt | sed s/^.*\\/\//
这是减 1,而不是 l,尽管 l 也可以。说明:ls -l/-1 会写出包含您不想要的内容的文件名。每行都通过 sed 进行管道传输,sed 在此处执行替换,如 s/ 所指定。替换的形式如下:
s/text/replacement/
我们将用空值替换从行首^
到行末的所有内容/
(/
是一个特殊字符,因此我们必须对其进行转义\\/
),即将其删除,这样就只剩下文件名了。