我一直在尝试创建一个函数来完成以下任务,并且在没有结果的情况下进行了详尽的搜索。希望对于那些精通shell脚本的人来说,这是一个快速的解决方案。
我的.zshrc中具有此功能:
t() { mkdir -p "$(dirname "$1")" && touch "$1"; }
创建指向文件以及文件本身的路径,但是我很喜欢这样的东西:
$ t nonexistent/path/{1,2,3}.txt
任何帮助将不胜感激。
答案 0 :(得分:2)
您只需要向函数添加循环。顺便说一下,在zsh
中,您不需要dirname
:
t() {
for d; do
mkdir -p "$d:h" && touch "$d"
done
}
您必须多拨打mkdir
,但这绝对是不必要的,但这要付出很小的代价,以避免检查所有参数以查看它们是否具有相同的前缀。另一种选择是简单地将目录和所需文件作为单独的参数传递:
t() {
mkdir -p "$1"
shift
push "$1" && touch "$@" && pop
}
t nonexistent/path {1,2,3}.txt
实际上,假设参数数量合理,您可以将:h
应用于$@
并让mkdir
和touch
进行循环。
t () {
mkdir -p "$@:h"
touch "$@"
}