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命令解决,因为它的输出适用于另一个程序。
答案 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