2017-04-05 61 views
1

我很難拼湊一個globbing表達式來匹配macOS上的屏幕截圖文件名稱模式。bash上macOS屏幕截圖的模式匹配

我已經成功地得到以下的正則表達式來完成這項工作:

Screen Shot \d{4}-\d{2}-\d{2} at \d{2}\.\d{2}\.\d{2}(\(\d+\))?\.png

此正則表達式匹配:

Screen Shot 2017-04-04 at 23.11.22.png 
Screen Shot 2017-04-04 at 23.38.40 (2).png 
Screen Shot 2017-04-04 at 23.38.40 (12).png 
Screen Shot 2017-04-04 at 23.38.40 (12342).png 

我得到的最接近如下,匹配除了在同一秒拍攝的屏幕截圖以外的所有內容,(number)裏面的那些:

Screen\ Shot\ [0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9]\ at\ [0-9][0-9].[0-9][0-9].[0-9][0-9].png

我已經開始測試*?\ \([0-9]\).png和它的作品,但因爲一旦我做了,結果是no such file or directory

的想法是創建一個別名,以消除所有的屏幕截圖,就像我無法加入兩個表達式:

alias clrss="cd ~/Desktop | rm -rf Screen\ Shot*.png"

回答

4

你試過這樣:

alias clrss="cd ~/Desktop | rm -rf Screen\ Shot*.png" 

不會因爲012工作發送一個命令的下一個命令的輸出,而;是用於分離順序命令,所以;作品有:

alias clrss="cd ~/Desktop ; rm -rf Screen\ Shot*.png" 

也行,-r是用於去除目錄及其內容,這是無用的,因爲那裏獲得了「T被任何目錄命名Screen Shot*.png

alias clrss="cd ~/Desktop ; rm -f Screen\ Shot*.png" 

,但該命令將讓你在桌面上,所以這是更好:

alias clrss="rm -f ~/Desktop/Screen\ Shot*.png" 

但是,如果你擔心太多匹配Screen\ Shot*.png匹配,這將是有意義的使用一個較爲具體的模式,如:

alias clrss="rm -f ~/Desktop/Screen\ Shot\ [0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9]\ at\ [0-9][0-9].[0-9][0-9].[0-9][0-9]*.png" 

,或者,如果這仍然太籠統了,你可以使用grepperl正則表達式和xargs rm,像這樣:

alias clrss="find ~/Desktop -name \"Screen Shot *.png\" | 
    grep -P 'Screen Shot \d{4}-\d{2}-\d{2} at \d{2}\.\d{2}\.\d{2}(\(\d+\))?\.png' | 
    tr '\n' '\0' | 
    xargs -r -0 rm -f" 

從@alcanaia UPDATE:在MacOS上,使用grep -E代替grep -P和使用xargs -0代替xargs -r -0

來自@alcanaia的更新2:這是一個更好的正則表達式;它包括12h格式和邊緣情況:

Screen Shot \d{4}-\d{2}-\d{2} at \d{1,2}\.\d{2}\.\d{2}((AM|PM))?(((\d)?\(\d+\))| \d)?\.png 
+1

首先,感謝您的回覆! 不幸的是你貼不工作,我得到了最後的命令: '用法:用grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A NUM] [-B NUM] [-C [NUM] xargs的:非法選項 - r [-e pattern] [-f file] [--binary-files = value] [--color = when] 用法:xargs [-Oopt] [-E eofstr] [-I replstr [-R替換]] [-J replstr] [-L number] ...' 我不是一個bash專家,但我注意到像'--regexp'而不是'-P'這樣的參數有一些不同,所以我懷疑我們在這裏使用不同版本的工具。你能在這方面給我啓發嗎? – valcanaia

+0

對不起,是的,我有來自Macports的GNU grep 3.0和GNU findutils xargs 4.6.0,而MacOS的默認設置是舊的,更加煩人的版本。我已經更新了使用這些工具的答案。 PS:如果你進入命令行的話,爲了安裝更新的'bash','grep','findutils','gawk'和'''''''''''''''' gsed'(對於初學者)。 – webb

+1

Thanks @webb我已經能夠將它們放在一起,只是改變一些東西:在'grep'中將'-P'改爲'-E';在'xargs'中刪除了'-r';改進了正則表達式,以考慮其他一些情況,如12h格式和屏幕截圖非常快,導致在'(x).png之前的一些額外數字,所以新的正則表達式是'屏幕截圖\ d {4} - \ d {2 ((AM | PM))?(((\ d)?\(\ d + \))上的\ d {2} )| \ d)?\。png' – valcanaia