我有一个文件'list',其中包含我要解压缩的档案列表。我的剧本是:
#!/bin/bash
while read line
do
echo 'string has been read'
grep -e '**.zip' | xargs -d '\n' unzip -o
done < 'list'
但它仅适用于列表中的第一个zip-archive并忽略列表中的其他字符串。如果我注释掉'grep -e '**.zip' | xargs -d '\n' unzip -o'
脚本会读取所有行。
我无法理解为什么它以这种方式工作,以及如何解决它。
答案 0 :(得分:3)
我认为即使没有循环也可以完成。
grep '\.zip$' < yourfile.txt | xargs -n1 unzip -o
或者,从stdin:
grep '\.zip$' | xargs -n1 unzip -o
-n1告诉xargs每个参数使用1个命令行
答案 1 :(得分:1)
你的循环中没有提到$line
。因此它不会按照你想要的方式工作。
怎么样:
#!/bin/bash
while read line; do
if [[ "$line" =~ "\.zip$" ]]; then
unzip -o $line
fi
done < list