[英]Using Regex to find certain file types
嘗試將jpg
, png
和JPG
文件從IMG_0000
開始從一個目錄復制到另一個目錄時IMG_0000
。 我找到了正確的表達,但我正在努力使其成功。
到目前為止,我已經放置了正確的正則表達式以及我的代碼。 我從中復制的目錄是/root/memory
,目標目錄是/root/photoarch
。 請注意,內部/root/memory
有多個子目錄和多種不同的文件類型。
正則表達式:
IMG_[0-9]{4}.[jpg,png,JPG]{3}
碼:
#!bin/bash
mkdir photoarch
find "/root/memory" -regex '.*IMG_[0-9]{4}.[jpg,png,JPG]{3}' -exec cp {} "/root/photoarch"\;
如果您嘗試復制名為IMG_<4-digits>.<jpg|JPG|png>
,那么您的正則表達式及其類型(默認情況下find
使用Emacs RE,而不是POSIX ERE )是錯誤的。
關於正則表達式,您將不得不使用替換而不是字符范圍。 例如jpg|png
將匹配jpg
或png
。 相比之下, [jpg,png]{3}
將匹配的任何3個字符的序列j
或p
或g
或,
或n
,像jjj
, j,p
,和pnj
。 此外,您必須轉義點(使用\\.
),否則它將匹配任何字符。
要使用POSIX ERE,請將-regextype
設置為posix-extended
(要列出所有接受的類型,請運行find -regextype help
)。
對於不區分大小寫的匹配,您可以使用-iregex
。
find /root/memory -regextype posix-extended -iregex '.*img_[0-9]{4}\.(jpg|png)' -exec cp {} /root/photoarch \;
(圍繞jpg|png
的括號是必要的,因為連接的優先級高於交替。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.