/mydata
複数のファイルを含むgz
フォルダがあります。
元のzipを維持しながら、他のフォルダにすべて解凍したいと思います。/myoutput
どうすればいいですか?解凍プロセスも追跡できますか?
ありがとうございます!
答え1
gzip
、basename
およびループを使用してください。
for pathname in /mydata/*.gz; do
gzip -dc "$pathname" >"/myoutput/$( basename "$pathname" .gz )"
done
これは、一致するすべてのパス名に対して繰り返され、各名前についてファイル()の圧縮を標準出力()に解く/mydata/*.gz
ために使用されます。gzip
出力はにリダイレクトされます。ファイル名は元のファイルと同じですが、ファイル名のサフィックスはありません(パス名からビットを削除し、最初の文字列を削除するため)。-d
-c
/myoutput
.gz
basename
/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 ""