簡體   English   中英

使用正則表達式過濾通過ls獲得的文件夾列表

[英]Filter a list of folders obtained via ls using a regex expression

上下文

我有一個ls命令,它給我一個文件夾basename的列表,如下所示:

INPUT:
bash$ ls -d /nfs_archivedbuilds/build/mx/${VERSION_NAME}/${OPERATING_SYSTEM}/* | xargs -n1 basename

OUTPUT: 
4750070-190311-0913-3603182
4761979-190319-SHELVE-3617880
4763232-190319-2049-3618496
4763232-190320-SHELVE-3619115
4764259-190320-1402-3619606
4764259-190320-cifx-6274238
4764339-190320-2049-3620637
4764339-190320-SHELVE-3620115
4764339-190320-cifx-6274274

這些文件夾的順序是從最早的(第一個結果)到最新的(最后的結果)。

我有一個適當的邏輯,首先檢查最新的邏輯:如果良好(我對文件夾的內容進行了一些檢查),我想保留它,否則我想分析第二個新的(依此類推)。

為了做到這一點,我首先得到tail -1

SETUPS_CONTROL=1
MY_SETUP=$(ls -d /nfs_archivedbuilds/build/mx/${VERSION_NAME}/${OPERATING_SYSTEM}/* | xargs -n1 basename | tail -${SETUPS_CONTROL})
... doing some stuff to check

...如果最終結果不好,我增加SETUPS_CONTROL並再次獲得MY_SETUP ,這次的尾巴為+1

我想保持相同的邏輯,但是能夠在我的ls命令中過濾掉每個不僅僅由數字組成的文件夾。 例如:

  • 文件夾4750070-190311-0913-3603182對我來說是好的,因為它只是數字和破折號
  • 文件夾4761979-190319-SHELVE-3617880對我4761979-190319-SHELVE-3617880 ,因為它包含一個單詞( SHELVE ),並且不僅由數字和破折號組成。

當前,當我應用循環來確定它是否好時,我被迫對獲得的每個結果進行正則表達式以確定它是否好:

if [[ ${MY_SETUP} =~ "^[0-9-]+$" ]] 
then
    #my setup might be good
else
    #my setup is not good already, no need to further my checks
fi

這可以正常工作,但是我想知道是否不能直接在ls命令中過濾列表而不是獲取任何內容,並且不得不循環以了解它是否好。

我的嘗試

我試圖將grep "my regex expression"傳遞到命令中:

ls -d /nfs_archivedbuilds/build/mx/${VERSION_NAME}/${OPERATING_SYSTEM}/* | xargs -n1 basename | grep "^[0-9-]+$"

...但返回空結果。 與單引號相同:

ls -d /nfs_archivedbuilds/build/mx/${VERSION_NAME}/${OPERATING_SYSTEM}/* | xargs -n1 basename | grep '^[0-9-]+$'

誰能幫忙嗎?

使用正則表達式執行grep時缺少-E ,請添加grep -E

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM