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 關注
- 388 瀏覽
添加回答
舉報