使用LS作为特定路径&文件类型没有退回完整文件路径?

时间:2013-08-11 20:01:57

标签: linux bash ls

我正在编写一个bash脚本,并希望使用LS给它一个路径/ * .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管道的解决方案。

有什么想法吗?谢谢大家!

4 个答案:

答案 0 :(得分:3)

您可以使用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).

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

从目录运行ls命令:

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

但是你真的不需要使用ls命令。 shell已经为你扩展了*tar通配符;在这种情况下,所有ls都会打印参数。所以:

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

(顺便提一下,您的grep "tar"命令会列出名称中任何位置"tar"的所有文件,而不只是名称以.tar结尾的文件。如果您想使用{{1}你需要grep。)

答案 3 :(得分:0)

should not use ls for this。相反,只需创建一个全名数组:

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

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