複数のファイルを一度に解凍する Bash スクリプト

複数のファイルを一度に解凍する Bash スクリプト

次のファイルセットがあります。

lium3@l128-37:/DATA/fr94/01 $ ls -l
total 7784
-rw-r--r-- 1 lium3 mcm1 395575 May  2  1996 fr940104.0z
-rw-r--r-- 1 lium3 mcm1 113815 May  2  1996 fr940104.1z
-rw-r--r-- 1 lium3 mcm1 186333 May  2  1996 fr940104.2z
-rw-r--r-- 1 lium3 mcm1 164854 May  2  1996 fr940105.0z
-rw-r--r-- 1 lium3 mcm1  39677 May  2  1996 fr940105.1z
-rw-r--r-- 1 lium3 mcm1 284948 May  2  1996 fr940105.2z

一度に解凍したいです(これは単なる例です!)。

私はこれを試しました

find -name '*.0z' -exec sh -c 'uncompress  "${1%.*}" "$1"' _ {} \;

今受けたこと:

gzip: ./fr940125.gz: No such file or directory
gzip: ./fr940125.0z: unknown suffix -- ignored
gzip: ./fr940106.gz: No such file or directory
gzip: ./fr940106.0z: unknown suffix -- ignored

私はそのようなファイルを含む多くのディレクトリを持っています。

ディレクトリを実行するスクリプトを取得できる場合は、ディレクトリを介して再帰的に実行できますか?

ベストアンサー1

2つの問題があるようです。

1:${1%.*}結果はファイルのデフォルト名(例fr940125:)なので、解凍時にデフォルトのサフィックス.gzを追加しようとしましたが、結合した新しいファイル名のファイルは存在しません。

2:uncompressにアーカイブの正しいファイル名である2番目のパラメータを指定しましたが、uncompressはファイルの終わりを処理する方法を知りません。パラメータ ""をパラメータとして渡してみてください-S .0z

次のコマンドは、現在のディレクトリとすべてのサブディレクトリのすべての.0zファイルを繰り返し抽出する正しいコマンドです。

find -name '*.0z' -exec sh -c 'uncompress  -S .0z "$1"' _ {} \;

おすすめ記事