我有一个压缩目录的目录,如下所示:
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
仅用于显示转换后的文件名。