2012-01-26 25 views
11

怎样才可以有以下命令BASH重定向创建文件夹

echo "something" > "$f" 

其中$f将会像folder/file.txt创建文件夹folder如果不存在?

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

例如,如果我有

A/F1/
A/F2/
A/F3/

我想有

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

回答

11

其他的答案在这里使用的是外部命令“目录名”。这可以在不调用外部工具的情况下完成。

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

你也可以检查,如果该目录已经存在,但是这不是真的的mkdir -p要求:

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

谢谢你的提示,但正确的语法实际上是'$ { f%/ *}' – baruch

+0

我已经更新了答案。对不起,我已经给了'basename',而不是'dirname'。 – jordanm

5

尝试

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

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

mkdir -p "$(dirname $f)" 
0
echo "something" | install -D /dev/stdin $f