1

我有一个文件“列表”,其中包含我要解压缩的档案列表。我的脚本是:

#!/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'脚本会读取所有行。

我不明白为什么它会这样工作,以及如何解决它。

4

2 回答 2

3

我认为,即使没有循环也可以完成。

grep '\.zip$' < yourfile.txt | xargs -n1 unzip -o

或者,从标准输入:

grep '\.zip$' | xargs -n1 unzip -o

-n1 告诉 xargs 每个参数使用 1 个命令行

于 2013-01-13T13:22:48.007 回答
1

您没有$line在循环中引用。因此它不会按照你想要的方式工作。

关于什么:

#!/bin/bash
while read line; do
    if [[ "$line" =~ "\.zip$" ]]; then
        unzip -o $line
    fi
done < list
于 2013-01-13T13:13:19.343 回答