import os
import tarfile

def extract_tar_gz(filepath, extract_dir):
    """ Unpack archive in specified directory """
    try:
        with tarfile.open(filepath, "r:gz") as tar:
            tar.extractall(path=extract_dir)
        print(f"[+] Extracted: {filepath}")
    except Exception as e:
        print(f"[!] Error extracting {filepath}: {e}")

def should_extract(archive_path):
    """ check exist directory's name without .tag.gs """
    dirname = os.path.splitext(os.path.splitext(archive_path)[0])[0]
    list_ignore = ['brd.tar.gz', 'aux_data.tar.gz', 'uvi.tar.gz', 'aux.tar.gz']
    
    if all(elem not in archive_path for elem in list_ignore):
        return not os.path.isdir(dirname)

def walk_and_extract(start_dir):
    """ recursive directory traversal with unpacking """
    for root, _, files in os.walk(start_dir):
        for file in files:
            if file.endswith(".tar.gz"):
                archive_path = os.path.join(root, file)
                target_dir = os.path.splitext(os.path.splitext(archive_path)[0])[0]
                if should_extract(archive_path):
                    extract_tar_gz(archive_path, target_dir)

if __name__ == "__main__":
    import sys
    if len(sys.argv) != 2:
        print("Usage: python recursive_unpack_targz.py /path/to/start/dir")
    else:
        walk_and_extract(sys.argv[1])

