在 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
我想创建目录,其名称应与父目录中的压缩文件列表相对应。此外,我想去掉目录结果名称中的文件扩展名。
例如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