6

find ./dir -type f -iname "*.t[argz]*[bz2]" -print | xargs mv --target-directory=dir 似乎在名称中有空格的文件上失败。如何改进它?还是替代方案?

感谢以下回答:我的 mv 不支持 --null 或 -0,我使用的是 cygwin:

$ mv --帮助
用法: mv [OPTION]... [-T] SOURCE DEST
  或: mv [OPTION]... SOURCE... DIRECTORY
  或: mv [选项]... -t 目录源...
将 SOURCE 重命名为 DEST,或将 SOURCE(s) 移动到 DIRECTORY。

强制性论据
.

4

3 回答 3

11

在命令和 xargs (或)选项上使用-print0而不是 - 然后 NUL 将用作分隔符而不是换行符和空格。-printfind-0--null

find ./dir -type f -iname "*.t[argz]*[bz2]" -print0 | xargs --null mv --target-directory=dir
于 2010-01-07T19:09:36.747 回答
0

您是否查看过 find 的 -exec 选项?

find ./dir -type f -iname "*.t[argz][bz2]" -exec mv {} --target-directory=dir ';' 

-exec 选项将执行它后面的任何选项作为命令,直到它看到用引号括起来的分号。这样您就不必处理间距问题。

于 2010-01-07T20:10:38.993 回答
0

GNU 查找

find ./dir -type f -iname "*.t[argz]*[bz2]" -exec mv "{}" /destination +;
于 2010-01-08T00:40:12.920 回答