ファイルを再帰的に解凍および解凍するにはどうすればよいですか?

私は、zipと、zip付きのrar、およびLinuxボックス内にあるrarデータを含む大規模なファイルを持っています。

私は基本的に原稿または1つを必要とします-ディレクトリを再帰的に探索し、それが発見したあらゆる種類のrarまたはzipを解凍および解凍するライナー。

2
2022-07-25 17:25:56
ソース シェア
Risposte: 4

これは、シェルスクリプトを使用してこれを修正する人です。

Linuxには再帰的な解凍の選択肢がないようです:(

2
2022-07-25 19:46:48
ソース

私がこれを行うことを検討できる唯一の手段は、ファイルが適切に解凍された後にファイルを取り除く原稿を見つけて実行することで数回ループすることです。 サブディレクトリを何度も確認する必要があるため、正確な信頼性はありません。 (上に強いファイル名が必要です)

recursive_unpack

#!/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をマウントする必要があります
  • ディレクトリサイトを検出できない場合は、エラーで終了します
  • アンパッカーでエコーメッセージを削除しないでください。エコーメッセージは、ループを終了するためにアンロードするデータの存在を確認するために使用されます。
1
2022-07-25 19:46:48
ソース

高速なワンライナーは、アーカイブがすでに抽出されているかどうかを調べません。

$ find . -name '*.rar' -execdir unrar e '{}' + && find . -name '*.zip' -execdir unzip -tq '{}' +
1
2022-07-25 19:46:48
ソース

たぶんdtrx()で十分ですが、rarタイプを処理できるかどうかはわかりません。

0
2022-07-25 19:35:33
ソース