我正在尝试在凌乱的旧硬盘驱动器上复制大量图片,但我无法在 Windows 文件资源管理器中打开这些图片(不要问...),为了帮助我亲爱的奶奶,我必须这么做。我可以用 Babun(很棒的 Windows shell)在其中导航。
到目前为止我已经尝试过命令:
$ find /cygdrive/h/Documents\ and\ Settings -name '*.jpeg|png|JPEG' -exec cp '{}' /cygdrive/f/tof \;
$ find /cygdrive/h/Documents\ and\ Settings -name '*.(jpeg|png|JPEG)' -exec cp '{}' /cygdrive/f/tof \;
没有结果...是我遗漏了什么吗?
答案1
find's
-name
谓词采用 glob,而不是正则表达式。
如果要将正则表达式与 一起使用find
,请使用-regex
(或-iregex
不区分大小写)。例如:
find ... -regextype egrep -iregex '.*\.(jpe?g|png)$' ...
或者,使用括号对多个-name
或-iname
谓词进行“或”运算,例如:
find ... \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' \) ...
笔记:括号需要进行反斜杠转义,以防止 shell 将它们解释为对子 shell 的请求,从而导致-bash: syntax error near unexpected token
('`
答案2
我不认为寻找是执行此操作的正确工具,同步可能会更好,但如果您希望所有文件最终都在一个目录中,则 find 可以做到这一点,但您需要删除命令行中 {} 周围的单引号,因为这意味着使用文字 {} 而不是文件名。