我有一個壓縮目錄的目錄,如下:
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
僅用於顯示轉換後的檔案名稱。