1

解凍したいアーカイブのリストを含むファイル「リスト」があります。私のスクリプトは次のとおりです。

#!/bin/bash
while read line
do
   echo 'string has been read'
   grep -e '**.zip' | xargs -d '\n' unzip -o
done < 'list'

ただし、リスト内の最初の zip アーカイブに対してのみ機能し、リスト内の他の文字列は無視されます。コメントアウトすると、'grep -e '**.zip' | xargs -d '\n' unzip -o'スクリプトはすべての行を読み取ります。

なぜこのように動作するのか、どのように修正するのか理解できません。

4

2 に答える 2

3

ループがなくてもできると思います。

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

または、stdinから:

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

-n1は、引数ごとに1つのコマンドラインを使用するようにxargsに指示します

于 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 に答える