それぞれ4つのファイルを含む複数の.zipフォルダ(約600)を含むフォルダツリーがあります。各フォルダからファイルを抽出して別のフォルダにコピーしたいと思います。状況を複雑にするために、各フォルダのファイル名は同じです。これを行うために実行できるスクリプトはありますか?助けてくれてありがとう。
答え1
次のことを試すことができます。
mkdir -p "DESTDIR"
for i in *.zip ; do
unzip "$i" "THEFILE" -d "DESTDIR"
mv "DESTDIR/THEFILE" "DESTDIR/$(basename "$i" .zip)_THEFILE"
done
DESTDIR
宛先パスに置き換えます。THEFILE
抽出したい各.zipファイルのファイル名に置き換えます。 zipファイルのファイル名によってファイル名が変更されます。
答え2
情報圧縮プログラムunzip
が認識できるグローバルモードファイル名に。したがって、zipファイルにfile1.gz
異なるフォルダに呼び出された多くのファイルが含まれている場合:
$ unzip FolderName.zip '*/file1.gz'
Archive: FolderName.zip
extracting: FolderName/b/c/file1.gz
extracting: FolderName/b/e/file1.gz
extracting: FolderName/b/f/file1.gz
FolderName.zip
thingsというファイルも含まれていますが、その他比較するfile1.gz
。目的のファイルをglobパターンと一致させることができればunzip
抽出できます。
他のコメントを見ると、抽出されたファイルをすべてリンクする必要があるという印象を受けました。出力を含む最上位フォルダーのunzip
名前が指定され、ターゲットFolderName
ファイル(file1.gz
)がすべてのサブフォルダーの同じフォルダー深さにあると仮定すると、次のように目的の操作が実行されます。
$ gzcat FolderName/*/*/file1.gz > one-big-uncompressed-log-file
つまり、2つのサブフォルダーレベルをスキップしてfile1.gz
ファイルを抽出してから解凍し、サポートされているほとんどの場所で見つけることができるgzcat
汎用プログラムに関連付けます。gzip