zjh*_*hui 32 shell find xargs mv
我有以下命令:
find . -type d -mtime 0 -exec mv {} /path/to/target-dir \;
Run Code Online (Sandbox Code Playgroud)
这会将创建的目录移动到另一个目录.如何使用xargs
而不是exec
做同样的事情.
Jon*_*ler 39
如果你有GNU mv
(和find
和xargs
),你可以使用-t
选项mv
(和-print0
for find
和-0
for xargs
):
find . -type d -mtime -0 -print0 | xargs -0 mv -t /path/to/target-dir
Run Code Online (Sandbox Code Playgroud)
请注意,现代版本find
(与POSIX 2008兼容)支持+
代替;
和行为大致相同xargs
而不使用xargs
:
find . -type d -mtime -0 -exec mv -t /path/to/target-dir {} +
Run Code Online (Sandbox Code Playgroud)
这使得find
组中方便的文件(目录)名称数量成为程序的单个调用.您没有对传递给mv
该xargs
提供的参数数量的控制级别,但您实际上很少需要它.这仍然取决于-t
GNU 的选项mv
.
小智 39
使用BSD xargs(适用于OS X和FreeBSD),您可以使用-J
为此构建的:
find . -name some_pattern -print0 | xargs -0 -J % mv % target_location
Run Code Online (Sandbox Code Playgroud)
这将移动任何匹配some_pattern
的.
对target_location
使用GNU xargs(适用于Linux和Cygwin),请-I
改用:
find . -name some_pattern -print0 | xargs -0 -I % mv % target_location
Run Code Online (Sandbox Code Playgroud)
-i
GNU xargs 的弃用选项意味着-I{}
可以使用如下:
find . -name some_pattern -print0 | xargs -0 -i mv {} target_location
Run Code Online (Sandbox Code Playgroud)
请注意,BSD xargs也有一个-I
选项,但这样做会有所不同.
归档时间: |
|
查看次数: |
44736 次 |
最近记录: |