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 .
答案 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 +;