在linux上递归移动文件

时间:2010-01-07 19:06:21

标签: linux find xargs

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

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

$ mv --help
Usage: mv [OPTION]... [-T] SOURCE DEST
  or:  mv [OPTION]... SOURCE... DIRECTORY
  or:  mv [OPTION]... -t DIRECTORY SOURCE...
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.

Mandatory arguments t
.

3 个答案:

答案 0 :(得分:7)

-print0命令和xargs -print(或find)选项上使用-0代替--null,然后将NUL用作分隔符而不是新行和空格。

find ./dir -type f -iname "*.t[argz]*[bz2]" -print0 | xargs --null mv --target-directory=dir

答案 1 :(得分:0)

你看过-exec选项了吗?

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

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

答案 2 :(得分:0)

GNU find

find ./dir -type f -iname "*.t[argz]*[bz2]" -exec mv "{}" /destination +;