python
#!/bin/python3
import os
import subprocess
from rich.progress import BarColumn, Progress, TimeRemainingColumn
def count_files_in_directory(directory):
# Recursively count all files in the directory
total_files = 0
for root, dirs, files in os.walk(directory):
total_files += len(files)
return total_files
def tar_with_progress(source_dir, output_tar):
total_files = count_files_in_directory(source_dir)
if total_files == 0:
print(f"No files found in directory: {source_dir}")
return
# Command to run tar and capture output
tar_command = ["tar", "cf", output_tar, "-C", source_dir, "."]
with Progress(
"[progress.description]{task.description}",
BarColumn(),
"[progress.percentage]{task.percentage:>3.0f}%",
TimeRemainingColumn(),
) as progress:
task_id = progress.add_task(f"Archiving {source_dir}...", total=total_files)
# Start the tar process
process = subprocess.Popen(
tar_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
)
files_processed = 0
for root, dirs, files in os.walk(source_dir):
for file in files:
# Simulate processing of each file (tar doesn't provide per-file feedback)
files_processed += 1
progress.update(task_id, completed=files_processed)
process.wait()
# Check if the tar command completed successfully
if process.returncode == 0:
print(f"Archive created successfully: {output_tar}")
else:
print(f"Error creating archive: {output_tar}")
import sys
if __name__ == "__main__":
source_directory = sys.argv[1] # Replace with your source directory
output_tarfile = sys.argv[2] # Replace with your desired output tar file name
tar_with_progress(source_directory, output_tarfile)
好像是AI写的