簡體   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