Could you please advice, how I can extract specific folders (and files) and ignore the root-level of directory inside the archive?
<ROOT_FOLDER>/dir1/file1.txt
<ROOT_FOLDER>/dir1/file2.txt
<ROOT_FOLDER>/dir1/dir2/file3.txt
I wrote a function, but it still gives me all the files from the archive, despite the endswith() filter.
#EXAMPLE!!! => package_basename = <ROOT_FOLDER>
tar_archive = os.path.join(directory_path, package_name)
destination = os.path.join(directory_temp, package_renamed)
def get_archive_content(tar_archive, package_basename):
with tarfile.open(tar_archive, 'r:gz') as tar_file:
members = tar_file.getmembers()
filtered_members = [
member.name.replace(package_basename + '/', './') for member in members
]
return filtered_members
members = get_archive_content(tar_archive, package_basename)
def extract_required_files() -> None:
with tarfile.open(tar_archive, 'r:gz') as tar_file:
for member in members:
if any(member.endswith(path + filename) for path in folder_libs for filename in libs):
tar_file.extract(member, destination)
elif any(member.endswith(filename) for filename in config_files):
tar_file.extract(member, destination)
elif any(re.search(rf"{filename}*.*", member) for filename in config_default_files):
tar_file.extract(member, destination)
elif any(member.endswith(filename) for filename in script_files):
tar_file.extract(member, destination)
elif any(member.endswith(filename) for filename in start_files):
tar_file.extract(member, destination)
sys.stdout.write(member + '\n')
extract_required_files()
I tried to change to use re.search instead of .endswith(), but it doesn't help.
You need to extract the file/folder using the full name, not the filtered one