0

このスレッドで、サブフォルダー内のすべての.zip形式を対応するサブフォルダーに解凍する次のコードを確認しました。このコードに関する私の質問は次のとおりです。

(1)これはバッチジョブのbashスクリプトですか?もしそうなら、sudobashfilename.batとして実行できますか。

(2)コードで親フォルダディレクトリを指定する方法。親ディレクトリには、すべてのサブフォルダの下に、zip形式(圧縮)ファイルが含まれています。

(3) .rar.7zなどの他の圧縮形式を含めるようにコードを変更する方法

 for file in *.zip; do
       dir=$(basename "$file" .zip) # remove the .zip from the filename
       mkdir "$dir"
       cd "$dir" && unzip ../"$file" && rm ../"$file" # unzip and remove file if successful
       cd ..
  done
4

1 に答える 1

1
  1. bashはい、そのコードフラグメントはスクリプトのように見えます。名前が付いている場合は、を使用して実行filename.batできるはずです。sudo bash filename.bat

  2. このコードは、現在のディレクトリがすべてのzipファイルを含む「親フォルダ」であると想定しています。ファイルを含むサブディレクトリを処理するようにコードを変更する必要があり.zipます。それを行うには多くの方法があります。

  3. ファイル以外の形式を処理する必要がある.zip場合は、解凍するファイルとして引数として指定されたファイル名を使用するようにコードを修正することになるでしょう。

このコードは機能する可能性があります。

for file in "$@"
do
    dir=$(dirname "$file")
    extn=${base##*.}
    base=$(basename "$file" .$extn)
    mkdir -p "$dir/$base"
    (
    cd "$dir/$base"
    case $extn in
    zip)   unzip "../$base.$extn";;
    esac
    )
done

これで、理論的には、ステートメント内の拡張子のリストを拡張してcase、他のファイル形式を含めることができます。ただし、すべてのコンプレッサーが複数のファイルをパッケージ化するわけではないことに注意してください。.tar.gz通常、または.tar.xzまたはなどの複合形式があります.tar.bz2.tar対応するコンプレッサー(またはデコンプレッサー)は、内部のファイルからデータを抽出せずに、ファイルを単純に解凍します(圧縮サフィックスを失います) 。ただし、とがのように動作するrar場合は、次を使用できます。7zzip

    case $extn in
    (zip)   unzip "../$base.$extn";;
    (rar)   unrar "../$base.$extn";;  # Or whatever the command is
    (7z)    un7z  "../$base.$extn";;  # Or whatever the command is
    (*)     echo "$0: unrecognized extension $extn on $file" >&2;;
    esac

必要に応じて、コードを復元してファイルの圧縮形式を削除することもできます。

于 2012-11-25T15:38:36.253 に答える