我有一个 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
文件(比较这个问题)。