mkdir与bash脚本中的sed

时间:2015-01-20 12:51:36

标签: bash sed mkdir

我想创建名称应该与父目录中的压缩文件列表相对应的目录。另外,我想删除目标结果名称中的文件扩展名。

e.g。 archive01.gz应该生成一个名为archive01的目录

到目前为止我的脚本:

#!/bin/bash
for file in *.gz; do
    echo $file | sed 's/.gz//' | mkdir
done

错误消息是:

mkdir: missing operand

然而,

echo $file | sed 's/.gz//'

会得到目录的正确名称。如何将其传输到mkdir?

4 个答案:

答案 0 :(得分:4)

更好的方法是使用parameter substitution而不是管道/子shell:

#!/bin/bash
for file in *.gz; do
    mkdir ${file%.gz}
done

答案 1 :(得分:2)

试试这个,

#!/bin/bash
for file in *.gz; do
    echo "$file" | sed 's/\.gz//' | xargs mkdir
done

答案 2 :(得分:2)

mkdir不管道工作。请尝试以下方法:

mkdir `echo $file | sed 's/.gz//'`

`评估然后用答案替换它。它被称为命令替换,也可以写成:

mkdir $(echo $file | sed 's/.gz//')

答案 3 :(得分:1)

您可以使用命令替换

#!/bin/bash
for file in *.gz; do
     mkdir $(echo $file | sed 's/.gz//')
done

#!/bin/bash
for file in *.gz; do
     mkdir `echo $file | sed 's/.gz//'`
done