This commit is contained in:
Matthieu Jolimaitre 2025-06-17 15:30:36 +02:00
commit a70defc85f
7 changed files with 83 additions and 0 deletions

3
README.md Normal file
View file

@ -0,0 +1,3 @@
# Comprimé
Utility for compressing directories into unexecutable files.

30
compress.py Executable file
View file

@ -0,0 +1,30 @@
#!/usr/bin/env -S python3
import subprocess
import sys
def main():
[_, input] = sys.argv
input_tar = input + ".tar"
output = input + ".cprmt"
print("Compressing '" + input + "' into '" + output + "'.")
subprocess.Popen(["tar", "cf", input_tar, input]).wait()
input_tar_fd = open(input_tar, "rb")
output_fd = open(output, "wb")
byte_index = 0
while True:
read = input_tar_fd.read(1024)
if len(read) == 0:
break
for byte in read:
if byte_index == 0:
output_fd.write(bytes([5, byte]))
else:
output_fd.write(bytes([byte]))
byte_index += 1
byte_index %= 4
print("Done.")
if __name__ == "__main__": main()

30
decompr.py Executable file
View file

@ -0,0 +1,30 @@
#!/usr/bin/env -S python3
import subprocess
import sys
def main():
[_, input] = sys.argv
input_tar = input.replace(".cprmt", ".tar")
output = input_tar.replace(".tar", "")
print("Decompressing '" + input + "' into '" + output + "'.")
input_fd = open(input, "rb")
output_tar_fd = open(input_tar, "wb")
byte_index = 0
while True:
read = input_fd.read(1024)
if len(read) == 0:
break
for byte in read:
if byte_index == 0:
pass
else:
output_tar_fd.write(bytes([byte]))
byte_index += 1
byte_index %= 5
subprocess.Popen(["tar", "xf", input_tar]).wait()
print("Done.")
if __name__ == "__main__": main()

1
test/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/wdir

1
test/case/a Normal file
View file

@ -0,0 +1 @@
arbre

1
test/case/b Normal file
View file

@ -0,0 +1 @@
barbier

17
test/run Executable file
View file

@ -0,0 +1,17 @@
#!/usr/bin/bash
cd "$(dirname "$(realpath "$0")")"
set -e
rm -fr wdir
mkdir wdir wdir/in wdir/out
cp -r case wdir/in/
cd wdir/in
../../../compress.py case
cp case.cprmt ../out/
cd ../out
../../../decompr.py case.cprmt