Ash*_*ish 62 unix directory shell 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
Run Code Online (Sandbox Code Playgroud)
等等.
我想运行ls命令不是从/home/user/new/目录运行,因此我必须提供完整的目录名称,但我希望输出只作为
[me@comp]$ ls /home/user/new/*.txt
file1.txt file2.txt file3.txt
Run Code Online (Sandbox Code Playgroud)
我不想要整个路径.只需要文件名.这个问题必须使用ls命令解决,因为它的输出是针对另一个程序的.
fge*_*fge 102
ls whateveryouwant | xargs -n 1 basename
那对你有用吗?
否则你可以(cd /the/directory && ls)(是的,圆括号)
小智 37
不需要Xargs和所有,ls绰绰有余.
ls -1 *.txt
Run Code Online (Sandbox Code Playgroud)
显示行
pgl*_*pgl 10
有几种方法可以实现这一目标.一个是这样的:
for filepath in /path/to/dir/*
do
filename=$(basename $file)
... whatever you want to do with the file here
done
Run Code Online (Sandbox Code Playgroud)
解决它的一种奇特方法是使用两次“rev”和“cut”:
find ./ -name "*.txt" | rev | cut -d '/' -f1 | rev
Run Code Online (Sandbox Code Playgroud)
所选的答案对我不起作用,因为我的文件名中有空格、引号和其他奇怪的字符。要引用 的输入basename,您应该使用:
ls /path/to/my/directory | xargs -n1 -I{} basename "{}"
Run Code Online (Sandbox Code Playgroud)
无论文件被称为什么,这都保证可以工作。
您可以在命令行中添加sed脚本:
ls /home/user/new/*.txt | sed -r 's/^.+\///'
Run Code Online (Sandbox Code Playgroud)