BASH重定向创建文件夹。

27

我该如何运行以下命令?

echo "something" > "$f"

如果$f是类似于folder/file.txt的形式,那么如果文件夹不存在,创建文件夹folder

如果我不能这样做,我该如何编写一个脚本来将目录'a'中所有文件夹(不包括内容)复制到目录'b'中?

例如,如果我有:

a/f1/
a/f2/
a/f3/

我想要:

b/f1/
b/f2/
b/f3/

4个回答

25

这里的其他答案都使用了外部命令dirname。但是不需要调用外部工具也可以完成。

mkdir -p "${f%/*}"

您也可以检查目录是否已经存在,但使用mkdir -p其实并不需要:

mydir="${f%/*}"
[[ -d $mydir ]] || mkdir -p "$mydir"

谢谢你的提示,但正确的语法实际上是${f%/*} - Baruch
我已经更新了答案。对不起,我给了你basename的替代方案,而不是dirname - jordanm
-d $mydir 是什么作用? - Andrew Kirna
2
${f%/*} 中的所有额外符号是什么意思? - Andrew Kirna
原始示例中的“something”去哪里了? - Alex Jansen
显示剩余3条评论

11
echo "something" | install -D /dev/stdin $f

2
+1 对于简洁的解决方案。然而,只需几句话的解释,答案就可以更好。 - not2savvy
2
+1 对于简洁的解决方案表示赞赏。然而,如果能够加上几句解释,答案可能会更好。 - not2savvy

6
尝试
mkdir -p `dirname $f` && echo "something" > $f

3
你可以使用mkdir -p在写入文件之前创建文件夹:
mkdir -p "$(dirname $f)"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接