mv_files() {
local args=("$@")
local num_args=${#args[@]}
if [ $(bc <<< "$num_args%2") -ne 0 ]; then
echo "Number of arguments must be a multiple of 2."
return 1
else
num_files=$(bc <<< "$num_args/2")
tmpdir=$(mktemp -d -p .)
for (( i=0;i<num_files;i++ )); do
local n=$(bc <<< "$i+$num_files")
mv "${args[$i]}" "${tmpdir}/${args[$n]}"
done
mv ${tmpdir}/* .
rmdir ${tmpdir}
echo "Done."
fi
}
请注意
扩展到
在
mv
调用实用程序之前。由于有两个以上的操作数,并且最后一个操作数不是目录,因此会出现错误。如果最后一个操作数是目录的路径名,这会将所有文件移动到该目录中(您也会因两次指定某些文件而出现一些错误)。相反,一次将一个文件移动到一个临时目录中,同时将它们重命名为正确的名称。然后将它们移回去。
这没有捷径,该
mv
实用程序一次只能重命名一个文件。@Kusalananda 回答的补充:
您可以使用函数使其通用:
然后你像这样运行它:
或者像你那样做:
或者