Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 仅显示文件名而不显示整个目录路径_Shell_Unix_Directory_Ls - Fatal编程技术网

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

Shell 仅显示文件名而不显示整个目录路径,shell,unix,directory,ls,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 等等 我不希望从/home/user/new/目录运行ls命令,因此我必须给出完整的目录名,但我希望输出仅为 [me@comp]$ ls /home/user/

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
等等

我不希望从
/home/user/new/
目录运行
ls
命令,因此我必须给出完整的目录名,但我希望输出仅为

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

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

ls whateveryouwant | xargs-n 1 basename

这对你有用吗


否则您可以
(cd/the/directory&&ls)
(是的,使用括号)

有几种方法可以实现这一点。一种是:

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

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

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

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

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

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

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

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


不需要Xargs,ls就足够了

ls -1 *.txt

按行显示

只是希望对某人有所帮助,因为旧问题似乎时不时地会出现,我总是在这里找到好的提示

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

我们使用的解决方案是:

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

将只输出目录中的文件名。如果您希望每行使用一个,请使用ls-1


(根据Sactiw的评论,更改为&&)。

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

ls /home/user/new | tr '\n' '\n' | grep .txt
另一种方法:

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

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

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

无论调用什么文件,这都保证有效。

使用
basename
命令:

basename /home/user/new/*.txt

如果要在路径中列出名称,但它们具有不同的文件扩展名

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

这里是另一种方法:

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

什么操作系统?例如,OSX已经实现了您想要的功能。您确定ls没有别名吗?如果
所需的内容
引用多个目录,您可能应该使用
ls-d
。请注意,如果路径包含空格,xargs将在这些目录上中断。您需要改用
xargs-d'\n'-n1
。这在Cygwin上非常慢。
xargs
解决方案看起来更整洁,但我发现它非常慢。我选择了运行良好的
cd
解决方案。在我的情况下,使用
xargs
是一个更好的解决方案,因为我在执行
ls
时给出了整个路径,所以
ls-1
在我的情况下不起作用。如果仔细阅读OP,这是不正确的。这只有在你在那个目录下才有效。工作得很好!谢谢@VRVigneshwara
ls-1 bin/
在Linux Debian上列出bin/目录中没有路径的条目。这将导致大量文件和以
.txt
结尾的目录出现问题,并且需要在shell中处于活动状态。basename也可以为您删除后缀(您将要删除的后缀指定为第二个参数)。您的命令将变成:
ls/home/user/new/*.txt | xargs-n1-J%basename%.txt
使用“;”在这种情况下,取代命令链接的“&&&”将是错误的,因为在不存在“dir”的情况下,它将返回一些输出,也就是说,从执行此命令的当前工作目录列出文件。例如,(cd-fake_-dir;ls)将列出当前目录中的文件,即使不存在此类伪目录,这是不正确的。
ls -1 /home/user/new/*.txt|rev|cut -d'/' -f1|rev