zipとrarを含む大容量ファイルがあります。zipとrarファイルはLinuxシステムにあります。
デフォルトでは、ディレクトリを再帰的に検索し、見つけたrarまたはzipを解凍して解凍するスクリプトまたは単一のライナーが必要です。
答え1
誰かがシェルスクリプトを使用してこの問題を解決した方法は次のとおりです。
http://www.dbforums.com/unix-shell-scripts/1619154-how-unzip-files-recursively.html
Linuxには再帰的な解凍オプションがないようです。
答え2
私が考えることができる唯一の方法は、findを使用して何度も繰り返し、ファイルが正しく解凍された後にファイルを削除するスクリプトを実行することです。サブディレクトリを複数回渡す必要があるため、それほど効率的ではありません。 (予想されるファイル名は上部に太字で表示されています)
再帰的アンパッキング
#!/bin/bash
if [ -d "$1" ]; then
STARTDIR="$1"
else
echo "starting dir not found: $1"
exit
fi
COUNTER=1
while [ $COUNTER -gt 0 ]; do
COUNTER=`find "$STARTDIR" -type f \( -iname '*.zip' -o -iname '*.rar' \) -exec ./unpacker \{\} \; | wc -l`
done
アンパッカー
#!/bin/bash
BASENAME=`basename "$1"`
BASEDIR=`dirname "$1"`
cd "$BASEDIR"
EXT=`echo "$BASENAME" | awk -F . '{print $NF}'`
if [ "$EXT" = "zip" ]; then
unzip -qq "$BASENAME"
if [ $? -eq 0 ]; then
echo "zip unpacked: $1"
rm "$BASENAME"
fi
fi
if [ "$EXT" = "rar" ]; then
unrar e -y -c- -inul "$BASENAME"
if [ $? -eq 0 ]; then
echo "rar unpacked: $1"
rm "$BASENAME"
fi
fi
する
chmod u+x recursive_unpack
chmod u+x unpacker
呼ぶ./recursive_unpack "/my/directory/containing/my/files"
- recursive_unpackは、解凍が同じディレクトリにあると予想します。
unrar
そしてunzip
インストールする必要があります- ディレクトリが見つからない場合、エラーが発生して終了します。
- アンパッカーからエコーメッセージを削除しないでください。ループを終了するためにアンパックするファイルが存在することを確認するために使用されます。
答え3
簡単に言えば、アーカイブが抽出されたことを確認しません。
$ find . -name '*.rar' -execdir unrar e '{}' + && find . -name '*.zip' -execdir unzip -tq '{}' +
答え4
rar部分ファイルがある場合は、* .rarと一緒にそのファイルを削除したい場合があります。これを行うには、以下を追加できます。
find "$BASENAME" -regex '.*\.r[0-9][0-9]' -delete
ここで:
if [ $? -eq 0 ]; then
echo "rar unpacked: $1"
rm "$BASENAME"
# HERE
fi
したがって、bashはいくつかのファイルも削除します。