3 回答
TA贡献1883条经验 获得超3个赞
该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
scriptlet “使用”所有参数($@
)):
find /foo -name 'bar*' | tr '\n' ' ' | xargs sh -c 'mv "$@" /dest' --
TA贡献1859条经验 获得超6个赞
该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 scriptlet “使用”所有参数($@)):
find /foo -name 'bar*' | tr '\n' ' ' | xargs sh -c 'mv "$@" /dest' --
TA贡献1789条经验 获得超10个赞
如果您要使用来查找常规文件find,则应使用-type f,否则可能会找到目录。xargs您无需在这里使用,因为您已经内置了该功能find。
使用GNU mv:
find /foo -type f -name 'bar*' -exec mv -t /dest {} +
这不会检测到具有相同名称的目标文件。为此,请使用
find /foo -type f -name 'bar*' -exec sh -c '
for name do
destname="/dest/${name##*/}"
if [ ! -f "$destname" ]; then
mv "$name" "$destname"
else
printf '%s exists already, will not copy %s\n' "$destname" "$name" >&2
fi
done' sh {} +
这将拒绝移动将覆盖文件的文件/dest(并报告这些文件)。
这些命令将与所有有效的Unix文件名一起使用。
- 3 回答
- 0 关注
- 352 浏览
添加回答
举报