将多个 find 命令合并为一个

将多个 find 命令合并为一个

我有一个 bash 文件,其中包含以下命令,用于将书籍从我的 books 文件夹复制到我的 toread / Read Later 文件夹中

find /books -name '*.pdf'  -exec cp -n {} /toread \;
find /books -name '*.epub'  -exec cp -n {} /toread \;
find /books -name '*.azw*'  -exec cp -n {} /toread \;
find /books -name '*.mobi'  -exec cp -n {} /toread \;

我想摆脱这些命令的重复性并将操作批量合并为一个?

答案1

-o表达式中的find“或”是逻辑上的。不过有一个怪癖:并置(隐含的“与”运算符)优先于运算-o符。因此,您经常需要使用括号。它们应该被转义或引用,否则它们将被 shell 解释:

find /books \( -name '*.pdf' -o -name '*.epub' -o -name '*.azw*' -o -name '*.mobi' ')' -exec cp -n {} /toread \;

请注意,我故意省略了左括号并引用了右括号,只是为了显示两种方式。

如果没有括号,该-exec部分仅适用于*.mobi文件(比较这个问题)。

相关内容