將目錄名稱附加到 shell 中 tar.gz 目錄的內容中

將目錄名稱附加到 shell 中 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

答案2

分兩步驟進行提取和重新壓縮:

cd MainDirectory && for f in *.tar.gz; do
  tar --transform="s,^,${f%.tar.gz}_," --show-transformed-names -xvzf "$f"
done && pbzip2 *.fasta

選項--show-transformed-names-v僅用於顯示轉換後的檔案名稱。

相關內容