所以说我家里有一个档案~/
:
sample.txt
我希望将其移至~/work/
我会做mv sample.txt work/
它会起作用。
但是,如果我想要一个可以mv文件的别名,然后cd到最后一个arg怎么办?这意味着将文件移动到文件夹,然后自动cd到该文件夹。
我有这样的事情(注意我的mv
是别名的默认覆盖保护,不确定这是否是问题):
alias mv='mv -i $@'
alias mvg='mv "$@"; cd !$;'
它不起作用(似乎mv并没有得到args)。
任何帮助将不胜感激!
答案 0 :(得分:6)
您可以定义一个简单的函数,而不是使用别名:
mv_cd() { mv "$1" "$2" && cd "$2"; }
用法:mv_cd file dest
仅适用于一个文件。要允许多个文件,您可以执行以下操作:
mv_cd() {
declare -a files
while (($# > 1)); do
files+=("$1")
shift
done
mv "${files[@]}" "$1" && cd "$1"
}
用法:mv_cd file1 file2 ... fileN dest
这将构建一个包含传递给函数的所有文件名的数组,然后移动它们并更改目录。
如comments中所述(感谢@chepner),在函数内部构建数组是不必要的。相反,您可以使用数组切片将最后一个参数与其他参数分开:
mv_cd() { mv "${@:1:$#-1}" "${@: -1}" && cd "${@: -1}"; }
传递给函数的参数位于数组$@
中。 ${@:1:$#-1}
是从第一个元素到$#-1
元素的切片,其中$#
是数组的长度。负索引可用于指定数组末尾的范围,因此${@: -1}
获取数组的最后一个元素。没有必要指定范围的结束,因为默认情况下它会到达数组的末尾。