シェルの tar.gz ディレクトリの内容にディレクトリ名を追加します。

シェルの tar.gz ディレクトリの内容にディレクトリ名を追加します。

次の圧縮ディレクトリ ディレクトリがあります。

MainDirectory/FolderA.tar.gz
MainDirectory/FolderB.tar.gz

各ディレクトリには、いくつかのファイルの名前が同じです。前任者。

MainDirectory/FolderA.tar.gz/file1.fasta
MainDirectory/FolderA.tar.gz/file2.fasta
MainDirectory/FolderB.tar.gz/file1.fasta
MainDirectory/FolderB.tar.gz/file1.fasta

各ディレクトリを解凍し、各ファイルの名前をディレクトリ名に変更して、個々のファイルを再圧縮する必要があります。私が望む出力は次のとおりです。

MainDirectory/FolderA_file1.fasta.bz2
MainDirectory/FolderA_file2.fasta.bz2
MainDirectory/FolderB_file1.fasta.bz2
MainDirectory/FolderB_file1.fasta.bz2

このコードを考えましたが、次の場所に$ fリテラルを含めるようにファイル名を変更します。

cd MainDirectory/
for f in *.tar.gz
    do
    tar -xvzf $f --transform 's,^,${f},' 
    pbzip2 *.fastq 
    done

出力:

MainDirectory/'${f}file1.fastq.bz2'
MainDirectory/'${f}file2.fastq.bz2'

ファイルの前に実際のフォルダ名が追加されるようにコマンドを変換するのに役立ちます。ありがとうございます。

ベストアンサー1

GNU実装では、tar--transformとにかくGNU拡張子)、次のことができます。

cd MainDirectory &&
  for f in *.tar.gz; do
    PREFIX=${f%.tar.gz} tar -xvvzf "$f" --to-command='
      pbzip2 > "${PREFIX}_$TAR_FILENAME.bz2"'
  done

おすすめ記事