繁体   English   中英

对特定的路径和文件类型使用LS,而无需重新获得完整的文件路径?

[英]Using LS for a specific path & file type without returing full file path?

我正在编写一个bash脚本,想使用LS给它提供一个path / *。tar,并使其仅返回文件名而不是完整路径和文件名,以将文件名通过读入数组进行传递,以下是发生的情况终奌站:

如果我只是将LS与目录一起使用,它将返回:

admin@linuxbox:~$ ls  /home/admin/Backup/
0_BuIndex.txt.backup  Backup1376238064.tar  Backup1376239611.tar  Backup1376241919.tar
Backup1376167035.tar  Backup1376238960.tar  Backup1376240158.tar  Backup1376243097.tar
Backup1376168581.tar  Backup1376239110.tar  Backup1376241421.tar
Backup1376237070.tar  Backup1376239350.tar  Backup1376241489.tar
Backup1376237928.tar  Backup1376239479.tar  Backup1376241608.tar

给出路径和文件类型,它返回:

admin@linuxbox:~$ ls  /home/admin/Backup/*.tar
/home/admin/Backup/Backup1376167035.tar  /home/admin/Backup/Backup1376239479.tar
/home/admin/Backup/Backup1376168581.tar  /home/admin/Backup/Backup1376239611.tar
/home/admin/Backup/Backup1376237070.tar  /home/admin/Backup/Backup1376240158.tar
/home/admin/Backup/Backup1376237928.tar  /home/admin/Backup/Backup1376241421.tar
/home/admin/Backup/Backup1376238064.tar  /home/admin/Backup/Backup1376241489.tar
/home/admin/Backup/Backup1376238960.tar  /home/admin/Backup/Backup1376241608.tar
/home/admin/Backup/Backup1376239110.tar  /home/admin/Backup/Backup1376241919.tar
/home/admin/Backup/Backup1376239350.tar  /home/admin/Backup/Backup1376243097.tar

我想使用第二条命令,但只返回没有路径的文件名,我现在的工作是使用

read -r -a TarArray <<< `ls -1 /home/admin/Backup | grep "tar"`

但我希望找到一种不需要我通过grep进行传递的解决方案。

有任何想法吗? 谢谢大家!

您可能会为此使用find

find /home/admin/Backup -name \*.tar -printf '%f\n'

从手册页:

-printf format
    True;  print  format  on  the standard output,
    interpreting `\' escapes and `%' directives.
    ...
    %f     File's name with any leading directories
           removed (only the last element).

所以我知道答案已经选择了,但是这里是一个使用ls的选项,以防万一您好奇:

ls /home/admin/Backup/*.tar | awk -F/ '{print $NF}'

从目录运行ls命令:

( cd /home/admin/Backup ; ls *.tar )

但是您确实不需要为此使用ls命令。 Shell已经为您扩展了*tar通配符; ls在这种情况下ls就是打印参数。 所以:

( cd /home/admin/Backup ; echo *.tar )

(顺便说一句,使用grep "tar"命令将在名称中任何位置列出所有带有"tar"文件,而不仅仅是名称以.tar结尾的文件。如果要使用grep ,则需要grep '\\.tar$'

不应为此使用ls 相反,只需使用全名创建一个数组:

files=(/path/to/dir/*.tar)

...,并在处理数组时在每个元素上运行basename

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM