题 BASH重定向创建文件夹


我怎样才能拥有以下命令

echo "something" > "$f"

哪里 $f 会是这样的 folder/file.txt 创建文件夹 folder 如果不存在?

如果我不能这样做,我怎么能让脚本将目录'a'中的所有文件夹(没有内容)复制到目录'b'?

例如,如果我有

A / F1 /
一个/ F2 /
A / F3 /

我希望有

B / F1 /
B / F2 /
B / F3 /


14
2018-01-26 17:21


起源




答案:


这里的其他答案是使用外部命令“dirname”。这可以在不调用外部实用程序的情况下完成。

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

您还可以检查目录是否已存在,但mkdir -p并不真正需要:

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

12
2018-01-26 17:28



感谢提示,但实际上语法正确 ${f%/*} - baruch
我已经更新了答案。对不起,我给了你替代品 basename不是 dirname。 - jordanm
是什么 -d $mydir 做? - Andrew Kirna
什么是in的所有额外符号 ${f%/*}? - Andrew Kirna
如果下一个参数是目录,则@AndrewKirna返回true。查看输出 help test。 - jordanm


尝试

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

5
2018-01-26 17:25





您可以使用 mkdir -p 在写入文件之前创建文件夹:

mkdir -p "$(dirname $f)"

1
2018-01-26 17:26





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

1
2018-01-09 11:23