将目录名称附加到 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仅用于显示转换后的文件名。

相关内容