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

时间:2011-12-15 10:41:12

标签: shell unix directory 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

等等。

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

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

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

13 个答案:

答案 0 :(得分:95)

ls whateveryouwant | xargs -n 1 basename

这对你有用吗?

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

答案 1 :(得分:36)

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

ls -1 *.txt

显示行方式

答案 2 :(得分:10)

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

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

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

答案 3 :(得分:7)

使用basename命令:

basename /home/user/new/*.txt

答案 4 :(得分:6)

(cd dir ; ls)

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

答案 5 :(得分:4)

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

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

答案 6 :(得分:4)

解决问题的一种奇特方法是使用两次" rev"和" cut":

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

答案 7 :(得分:2)

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

ls /home/user/new/*.txt|awk -F"/" '{print $NF}'
另一个更丑陋的方式是:

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

答案 8 :(得分:0)

希望对某人有所帮助,因为旧的问题似乎不时出现,我总是在这里找到好的建议。

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

我们使用的解决方案是:

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

答案 9 :(得分:0)

我们有很多方法可以做到这一点,您只需尝试遵循即可。

f: /usr/share/nginx/html/niko/
drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxr-xr-x root root share
drwxr-xr-x root root nginx
drwxr-sr-x kali root html
drwxr-sr-x kali root niko

另一种方法:

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

答案 10 :(得分:0)

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

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

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

答案 11 :(得分:0)

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

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

答案 12 :(得分:0)

这是另一种方式:

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