2017-04-05 44 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