使用多个条件“查找”多个条件以使用babun复制到其他硬盘


0

我试图将大量图片复制到凌乱的旧硬盘驱动器上,而该文件无法在Windows文件资源管理器中打开(不要问...),我必须寻求帮助我亲爱的奶奶的方法。我可以做的,用Babun(超棒的Windows Shell)浏览它。

到目前为止,我已经尝试了以下命令:

{ veronique }  » find /cygdrive/h/Documents\ and\ Settings -name '*.jpeg|png|JPEG' -exec cp '{}' /cygdrive/f/tof \;

{ veronique }  » find /cygdrive/h/Documents\ and\ Settings -name '*.(jpeg|png|JPEG)' -exec cp '{}' /cygdrive/f/tof \;

没有结果...我缺少什么吗?


1
find的-name谓词采用全域,而不是正则表达式。尝试-regex(或-iregex不区分大小写)或对多个-name谓词使用圆括号,例如find ... \( -iname '*.jp*g' -o -iname '*.png' \) ...
cas

Answers:


0

我认为find不是用于此目的的正确工具,rsync可能会更好,但是如果您乐于将所有文件都放在一个目录中,find会做到这一点,但是您需要删除{}周围的单引号在命令行中,因为这意味着使用文字{}而不是文件名。


它不是扩展的外壳{} -因此,通常的引用规则不适用于AFAIK
steeldriver,

1

find's -name 谓词需要一个整体,而不是一个正则表达式。

如果您想使用带有的正则表达式find,请使用-regex(或-iregex区分大小写)。例如:

find ... -regextype egrep -iregex '.*\.(jpe?g|png)$' ...

或者,使用括号对多个-name-iname谓词进行“或”运算,例如:

find ... \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' \) ...

注意:括号需要反斜杠转义,以防止外壳程序将其解释为对子外壳程序的请求,从而导致-bash: syntax error near unexpected token('`


谢谢,我想我现在得到了更好的解决方案。但是仍然无法使其正常工作。find /cygdrive/h/Documents\ and\ Settings -regextype egrep -iregex '*.(jpeg|png)$ -exec cp '{}' /cygdrive/f/tof \;给我find: ‘/cygdrive/h/Documents and Settings/All Users/Menu Démarrer/Programmes/Bridge Base Inc’: File exists。但没有采取任何行动。与-iname替代方案相同
user274630 '18

*.(jpeg|png)$不会与匹配find,因为查找在整个路径上都匹配,而不仅仅是简单的搜索(而且以a开头的正则表达式*实际上并不是有效的正则表达式-对于大多数regex引擎,它都可以“工作”,适用于各种“工作”,但这是偶然的,而不是设计造成的。它*是一个应用于前一个原子的修饰符- 等于或大于 零,使用它开始的正则表达式没有要修改的前一个原子)。 .*\.(jpe?g|png)$匹配以.jpg,.jpeg或.png结尾的文件名。
cas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.