我想创建名称应该与父目录中的压缩文件列表相对应的目录。另外,我想删除目标结果名称中的文件扩展名。
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?
答案 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