Uma solução python para fazer o trabalho completamente. Ele cria um arquivo tar.gz
dos arquivos mais recentes de todos os subdiretórios de um determinado diretório.
O script
#!/usr/bin/env python3
import os
import time
import tarfile
files_dir = "/path/to/directory/with/subdirectories"
targeted_file = "/path/to/latest_files.tar.gz"
latest_files = []
# get the latest files of all sub directories
for root, dirs, files in os.walk(files_dir):
for dr in dirs:
dr = root+"/"+dr
filelist = []
for item in os.listdir(dr):
file = dr+"/"+item
if os.path.isfile(file):
filelist.append((file, os.stat(file).st_mtime))
filelist.sort(key=lambda x: x[1])
if len(filelist) != 0:
latest_files.append(filelist[-1][0])
# write to latest_files.tar.gz
tar = tarfile.open(targeted_file, "w:gz")
for file in latest_files:
tar.add(file, arcname = file.split("/")[-1])
tar.close()
Copie o script em um arquivo vazio, defina na seção head do script o diretório, contendo os subdiretórios ( files_dir =
) e o caminho para o arquivo tar.gz
( targeted_file =
), e salve-o como get_latest.py
.
Execute-o pelo comando:
python3 /path/to/get_latest.py
O que faz
O script primeiro lista todos os (sub) diretórios. Dentro dos subdiretórios, lista os arquivos, classifica-os por data de modificação e adiciona os mais recentes à lista "principal", a ser incluída no arquivo compactado.
Para definir o número de versões a incluir
Para dar à resposta um caractere mais universal, abaixo de uma versão do script na qual você pode definir os números de versões (mais recentes) para incluir no arquivo compactado. Se o número de versões definidas ( versions =
) exceder o número real de arquivos em uma pasta, todos os arquivos serão incluídos.
O script
#!/usr/bin/env python3
import os
import time
import tarfile
files_dir = "/path/to/directory/with/subdirectories"
targeted_file = "/path/to/latest_files.tar.gz"
versions = 1
latest_files = []
# get the latest files of subdirectories
for root, dirs, files in os.walk(files_dir):
for dr in dirs:
dr = root+"/"+dr
filelist = []
for item in os.listdir(dr):
file = dr+"/"+item
if os.path.isfile(file):
filelist.append((file, os.stat(file).st_mtime))
filelist.sort(key=lambda x: x[1])
if len(filelist) != 0:
for item in filelist[-versions:]:
latest_files.append(item[0])
# write to latest_files.tar.gz
tar = tarfile.open(targeted_file, "w:gz")
for file in latest_files:
tar.add(file, arcname = file.split("/")[-1])
tar.close()