AbstProcDo Asked: 2018-11-12 00:22:36 +0800 CST2018-11-12 00:22:36 +0800 CST 2018-11-12 00:22:36 +0800 CST 使用 -exec 查找文件并将它们移动到另一个文件夹 772 我试图找到文件并将它们移动到另一个文件夹 $ find ~ -iregex ".*cheat.*\.pdf" -exec mv "{}" cheatSheet + find: missing argument to `-exec' 但是,测试有效 find ~ -iregex ".*cheat.*\.pdf" -exec echo {} + 我的使用有什么问题? find mv 2 个回答 Voted bitinerant 2018-11-12T00:36:05+08:002018-11-12T00:36:05+08:00 {}需要是-exec命令的结尾。该命令通过以下选项mv支持此操作:-t mv [OPTION]... -t DIRECTORY SOURCE... 所以你的命令是: find ~ -iregex ".*cheat.*\.pdf" -exec mv -t cheatSheet "{}" + Best Answer Kusalananda 2018-11-12T01:04:07+08:002018-11-12T01:04:07+08:00 使用-exec ... {} +时,{}必须在末尾,就在+. 这意味着您必须使用 -exec mv -t cheatSheet {} + 这将需要访问 GNU mv。如果没有 GNU mv,您将使用 -exec mv {} cheatSheat \; 一次移动一个文件,或 -exec sh -c 'mv "$@" cheatSheet' sh {} + 调用一个可以一次性移动所有文件的内嵌脚本。 你也不需要-iregex. 以下内容将更容易阅读和理解: find "$HOME" -ipath '*cheat*.pdf' \ -exec sh -c 'mv "$@" cheatSheet' sh {} + 或者,为清楚起见,以下任何一项都符合您的实际意思(这取决于您是要成为路径末尾的文件名cheat的一部分(第一种选择),还是路径中的一个目录名称(第二种选择)): find "$HOME" -iname '*cheat*.pdf' \ -exec sh -c 'mv "$@" cheatSheet' sh {} + find "$HOME" -ipath '*cheat*/*' -iname '*.pdf' \ -exec sh -c 'mv "$@" cheatSheet' sh {} + 请注意,这-ipath是一个 GNUfind扩展,但是-iname,虽然是非标准的,但更常见的是实现。 另外值得注意的是,如果您有名称冲突,即名称完全相同的文件,您将在移动其他文件的过程中覆盖一些已经移动的文件。使用 GNU mv,您可以通过使用-n选项(不会破坏现有文件)或-b选项(重命名/备份现有文件)来避免这种情况。 有关的: 了解 `find` 的 -exec 选项
{}
需要是-exec
命令的结尾。该命令通过以下选项mv
支持此操作:-t
所以你的命令是:
使用
-exec ... {} +
时,{}
必须在末尾,就在+
.这意味着您必须使用
这将需要访问 GNU
mv
。如果没有 GNUmv
,您将使用一次移动一个文件,或
调用一个可以一次性移动所有文件的内嵌脚本。
你也不需要
-iregex
. 以下内容将更容易阅读和理解:或者,为清楚起见,以下任何一项都符合您的实际意思(这取决于您是要成为路径末尾的文件名
cheat
的一部分(第一种选择),还是路径中的一个目录名称(第二种选择)):请注意,这
-ipath
是一个 GNUfind
扩展,但是-iname
,虽然是非标准的,但更常见的是实现。另外值得注意的是,如果您有名称冲突,即名称完全相同的文件,您将在移动其他文件的过程中覆盖一些已经移动的文件。使用 GNU
mv
,您可以通过使用-n
选项(不会破坏现有文件)或-b
选项(重命名/备份现有文件)来避免这种情况。有关的: