仅显示文件名而不显示整个目录路径

问题描述 投票:0回答:15

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

等等。

我想运行

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

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

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

shell unix directory ls
15个回答
173
投票

ls whateveryouwant | xargs -n 1 basename

这对你有用吗?

否则你可以

(cd /the/directory && ls)
(是的,括号是有意的)


65
投票

不需要 Xargs 和 all , ls 就足够了。

ls -1 *.txt

按行显示


18
投票

有多种方法可以实现这一目标。其中之一是这样的:

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

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

17
投票

使用

basename
命令:

basename /home/user/new/*.txt

10
投票

(cd dir && ls)

只会输出dir中的文件名。如果您想要每行一个,请使用

ls -1

(根据 Saactiw 的评论将 ; 更改为 &&)。


9
投票

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

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

8
投票

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

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

6
投票

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

basename
的输入,您应该使用:

ls /path/to/my/directory | xargs -n1 -I{} basename "{}"

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


3
投票

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

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

另一种丑陋的方式是:

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

1
投票

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

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

我们使用的解决方案是:

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

0
投票

我们有很多方法可以做到这一点,您可以尝试以下方法。

ls /home/user/new | tr '\n' '\n' | grep .txt

另一种方法:

cd /home/user/new && ls *.txt

0
投票

还有另一种方法:

ls -1 /home/user/new/*.txt|rev|cut -d'/' -f1|rev

0
投票

您还可以通过管道连接到 grep 并提取最后一个正斜杠之后的所有内容。它看起来很愚蠢,但我认为防御性 grep 应该没问题,除非(像某种疯子)你的文件名中有正斜杠。

ls folderpathwithcriteria | grep -P -o -e "[^/]*$"

0
投票

find
s
-exec
参数与
basename
非常适合此任务,不需要
xargs
或子 shell:

find "$path" -maxdepth 1 -mindepth 1 -exec basename {} \;

您可以使用

-type d
-type f
仅过滤文件或文件夹。


-1
投票

当您想要列出路径中的名称但它们具有不同的文件扩展名时。

me@server:/var/backups$ ls -1 *.zip && ls -1 *.gz

© www.soinside.com 2019 - 2024. All rights reserved.