在 bash 脚本中使用 sed 的 mkdir

mkdir with sed in bash script

我想创建目录,其名称应与父目录中的压缩文件列表相对应。此外,我想去掉目录结果名称中的文件扩展名。

例如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?

试试这个,

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

mkdir 不适用于管道。尝试以下操作:

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

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

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

您可以使用命令替换作为

#!/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

更好的方法是使用 parameter substitution 而不是 pipe/subshell:

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