複数のファイルを特定のフォルダに一度に圧縮するには?

複数のファイルを特定のフォルダに一度に圧縮するには?

/mydata複数のファイルを含むgzフォルダがあります。

元のzipを維持しながら、他のフォルダにすべて解凍したいと思います。/myoutput

どうすればいいですか?解凍プロセスも追跡できますか?

ありがとうございます!

答え1

gzipbasenameおよびループを使用してください。

for pathname in /mydata/*.gz; do
    gzip -dc "$pathname" >"/myoutput/$( basename "$pathname" .gz )"
done

これは、一致するすべてのパス名に対して繰り返され、各名前についてファイル()の圧縮を標準出力()に解く/mydata/*.gzために使用されます。gzip出力はにリダイレクトされます。ファイル名は元のファイルと同じですが、ファイル名のサフィックスはありません(パス名からビットを削除し、最初の文字列を削除するため)。-d-c/myoutput.gzbasename/mydata/

ループ内のコマンドは、次のように書くこともできます。

gzip -d -o "/myoutput/$( basename "$pathname" .gz )" "$pathname"

これにより、gzipリダイレクトを介さずに出力ファイルを直接書き込むことができます。

これは以下のファイルを/mydata読むことができます/myoutput

答え2

  • ルートのすぐ下にターゲットディレクトリを置きたい場合は、適切な所有権(および権限)を付与してください。

    sudo mkdir /myoutput
    sudo chown $USER /myoutput
    
  • ディレクトリをファイルを含むディレクトリに変更しますgz

    cd /mydata
    
  • 次のコマンドラインを実行してください。

    for i in *.gz;do echo -n "${i/.gz}|";zcat "$i" > "/myoutput/${i/.gz}";done; echo ""
    

関連情報