主頁 > 軟體設計 > 是否有通過檔案擴展名匹配的通配符模式,包括PWD和遞回?

是否有通過檔案擴展名匹配的通配符模式,包括PWD和遞回?

2022-05-17 03:29:45 軟體設計

只需要在所有嵌套目錄(包括 PWD)下將具有一個特定擴展名的檔案與使用“ globbing ”的 BASH 匹配。

  • 我不需要將所有嵌套目錄下的所有檔案與 shell globbing匹配,但不需要在 PWD 中匹配。
  • 我需要使用grep以外的命令來匹配檔案 搜索所有帶有檔案擴展名的目錄
  • 我不需要只遞回地grep,而只需要在具有特定擴展名s(復數)的檔案中
  • set -o globstar; ls **/*.*所有檔案都很好(不是我的問題)。
    • ls **/*.phpPWD 中不匹配。
    • set -o globstar; **/*.php回傳重復檔案。
  • grep -r --include=\*.php "find me" ./專門用于grep,而不是通配符(考慮這個問題)。似乎grep--include=GLOB,因為使用通配符是不可能的。

這個答案(這里),我相信可能沒有辦法使用通配符來做到這一點。

tl;博士

我需要:

  • 全域運算式
  • 匹配任何可以使用簡單 glob 的命令(ls, sed, cp, cat, chown, rm, 等等)
  • 主要在 BASH 中,但其他 shell 會很有趣
  • 在 PWD 和所有子目錄中遞回
  • 對于具有特定擴展名的檔案

我僅將grep&ls用作示例,但我需要一個也適用于其他命令的全域運算式。

  • grep -r --include=GLOB不是一個 glob 運算式,比如cp; 這是特定于解決方案的解決方法,grep而不是解決方案。
  • find不是 glob,但grep如果沒有這樣的 glob 運算式,它可能是非命令的解決方法。它需要|or while do;,等等。

例子

假設我有這些檔案,都包含“找到我”:

./file1.js
./file2.php
./inc/file3.js
./inc/file4.php
./inc.php/file5.js
./inc.php/file6.php

我只需要匹配一次/所有.php

./file2.php
./inc/file4.php
./inc.php/file6.php

重復回傳:shopt -s globstar; ... **/*.php

這改變了問題;它沒有解決它。

重復:ls

shopt -s globstar作為單個命令輸入之前...

ls **/*.php回傳:

inc/file4.php
inc.php/file5.js
inc.php/file6.php
  • file2.php 不回傳。

shopt -s globstar作為單個命令輸入后...

ls **/*.php回傳:

file2.php
inc/file4.php
inc.php/file6.php

inc.php:
file5.js
file6.php
  • inc.php/file6.php 回傳兩次。

重復:grep

shopt -s globstar作為單個命令輸入之前...

grep -R "find me" **/*.php回傳:

inc/file4.php: find me
inc.php/file6.php: find me
  • file2.php 不回傳。

shopt -s globstar作為單個命令輸入后...

grep -R "find me" **/*.php回傳:

file2.php: find me
inc/file4.php: find me
inc.php/file5.js: find me
inc.php/file6.php: find me
inc.php/file6.php: find me
  • inc.php/file6.php 回傳兩次。
    • 在看到從ls輸出中看到的重復項后,我們知道原因了。

當前解決方案:錯誤的誤用&&邏輯

grep -r "find me" *.php && grep -r "find me" */*.php
ls -l *.php && ls -l */*.php
  • 請不!I fail here && so I never happen

所需的解決方案:通過通配的單個命令

grep -r "find me" [GLOB]
ls -l [GLOB]

洞察來自grep

grep確實有--include標志,它實作了相同的結果,但使用特定于grep. ls沒有--include選項。這讓我相信沒有這樣的 glob 運算式,這就是為什么grep有這個標志。

uj5u.com熱心網友回復:

使用 bash,您可以先執行 ashopt -s globstar以啟用遞回匹配,然后該模式**/*.php將擴展到當前目錄樹中具有 .php 擴展名的所有檔案。

zsh 和 ksh93 也支持這種語法。其他將 glob 模式作為引數并對其進行自身擴展的命令(如您的grep --include)可能不會。

uj5u.com熱心網友回復:

使用 shell globing,只能通過/在 glob 末尾添加 a 來獲取目錄,但沒有辦法專門獲取檔案(zsh例外)

插圖:

使用給定的樹:

file.php
inc.php/include.php
lib/lib.php

假設 shell 支持非標準**glob:

  • **/*.php/擴展到inc.php/

  • **/*.php擴展到file.php inc.php inc.php/include.php lib/lib.php

  • 對于 get file.php inc.php/include.php lib/lib.php,您不能使用 glob。
    => 有了zsh**/*.php(.)

標準解決方法(任何外殼,任何作業系統)

遞回獲取與給定標準glob匹配的檔案然后對它們應用命令的 POSIX 方法是使用find -type f -name ... -exec ...

  • ls -l <all .php files>將會:
find . -type f -name '*.php' -exec ls -l {}  
  • grep "finde me" <all .php files>將會:
find . -type f -name '*.php' -exec grep "finde me" {}  
  • cp <all .php files> ~/destination/將會:
find . -type f -name '*.php' -type f -exec sh -c 'cp "$@" ~/destination/' _ {}  

備注:這個有點棘手,因為您需要~/destination/檔案引數之后,并且find's 的語法不允許find -exec ... {} ~/destination/

uj5u.com熱心網友回復:

建議不同的策略:

使用顯式命令在使用選項的選定檔案上find構建命令。bash-printf

檢查命令的正確性并運行。

1. 準備bash選定檔案的命令

 find . -type f -name "*.php" -printf "cp %p ~/destination/ \n"

2.檢查輸出,正確的命令,正確的過濾器,測驗

cp ./file2.php ~/destination/
cp ./inc/file4.php ~/destination/
cp ./inc.php/file5.php ~/destination/

3. 執行準備好的find輸出

 bash <<< $(find . -type f -name "*.php" -printf "cp %f ~/destination/ \n")

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/475847.html

標籤:正则表达式 linux 重击 球体

上一篇:決議腳本的輸出并僅在列印前處理最后一行

下一篇:在Bash中使用正則運算式讀取檔案名

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more