BASH重定向创建文件夹

BASH重定向创建文件夹,bash,Bash,如何使用以下命令 echo "something" > "$f" 其中$f类似于文件夹/file.txt如果文件夹不存在,是否创建文件夹文件夹 如果我不能这样做,我如何让脚本将目录“a”中的所有文件夹(没有内容)复制到目录“b” e、 g如果我有 a/f1/ a/f2/ a/f3/ 我想要 b/f1/ b/f2/ b/f3/试试看 mkdir -p `dirname $f` && echo "something" > $f 在写入文件之前,可以使用mkdir-p创

如何使用以下命令

echo "something" > "$f"
其中
$f
类似于
文件夹/file.txt
如果文件夹不存在,是否创建文件夹
文件夹

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

e、 g如果我有

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

我想要

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

试试看

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

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

mkdir -p "$(dirname $f)"

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

mkdir -p "${f%/*}"
您还可以检查目录是否已经存在,但使用
mkdir-p
时实际上并不需要这样做:

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

谢谢你的提示,但是正确的语法实际上是
${f%/*}
我已经更新了答案。很抱歉,我给您提供了
basename
的替代方案,而不是
dirname
-d$mydir
的作用是什么?如果下一个参数是目录,那么
${f%/*}
中的所有额外符号是什么?@AndrewKirna将返回true。请参阅
帮助测试的输出。
echo "something" | install -D /dev/stdin $f