linux - 如何将 -I 和 -n 与 xargs 结合使用?
问题描述
find
我想使用and移动大量文件xargs
。通常我会这样做:
find /foo -name 'bar*' | tr '\n' ' ' | xargs -I % echo mv % /dest
但是,当要移动的文件太多时,我达到了要传递给的参数数量的限制mv
。xargs
有一个-n
似乎很适合这个:
$ echo {0..9} | xargs -n 3 echo
0 1 2
3 4 5
6 7 8
9
但是,-I
暗示-L 1
,所以我不能使用-I
with -n
:
$ echo {0..9} | xargs -n 3 -I % echo % /dest
0 1 2 3 4 5 6 7 8 9 /dest
我希望有这样的行为:
$ echo {0..9} | xargs -n 3 -I % echo % /dest
0 1 2 /dest
3 4 5 /dest
6 7 8 /dest
9 /dest
这可能xargs
吗?我的机器上没有 GNU Parallel。
解决方案
该mv
命令(至少来自 Linux coreutils)具有-t
与此用例完美匹配的方便标志:
find /foo -name 'bar*' | tr '\n' ' ' | xargs mv -t /dest
上面还支持保留任何奇怪的文件名而不进行文件名按摩:
find /foo -name 'bar*' -print0 | xargs -0 mv -t /dest
如果出于某种原因你想像往常一样使用 mv,下面也可以工作(即使sh
用脚本来“使用”所有参数($@
)):
find /foo -name 'bar*' | tr '\n' ' ' | xargs sh -c 'mv "$@" /dest' --
推荐阅读
- php - 向 Laravel 工厂方法添加多个关系会导致 TypeError
- javascript - 如何使用javascript替换其他指定单词中的拉丁语指定单词?
- excel - 移动到下一个空行以从 Userform 填充单元格
- .net - 如何使用 Math.Net Numerics 计算正态分布的 Z 临界值?
- android - 如何在 c4droid 中使用 sd2 primitivies 和 sdl2_gfx
- ios - UIStackView 与 superview 的宽度成比例
- python - 如何将由空格分隔的整数(像素)组成的字符串列转换为大约 28000 行的数据帧
- c# - 将多行从form1中的gridview传递到form2并等待按钮单击
- c# - 使用 kernel.dll 获取进程 mdoules c#
- codenameone - CN1 项目未在 Windows10 上显示构建提示和移动属性