Bidouillages sur les scripts, quelques-uns ré-écrits en Python (plus rapide).

This commit is contained in:
Georges Dupéron 2011-03-18 22:15:11 +01:00
parent eccfc292a1
commit e6b27d3e85
7 changed files with 83 additions and 5 deletions

View File

@ -48,7 +48,7 @@ while read ab; do
for i in "${supprimable[@]}"; do
if true; then # diff -q "$orig" "$i" > /dev/null; then
qi="${i//\'/$q}"
echo "mv -i '$qi' '${qi%/*}/.%${qi##*/}' # '${orig//\'/$q}'"
echo "[ -e '$qi' ] && mv -i '$qi' '${qi%/*}/.%${qi##*/}' # '${orig//\'/$q}'"
fi
done
fi

View File

@ -1,5 +1,12 @@
#!/bin/zsh
# masque les dossiers qui ne contiennent que des fichiers dont le nom est
# .%fichier, récursivement (les dossiers sont masqués en préfixant ".%" à
# leur nom, donc les dossiers ne contenant que des fichiers / dossiers
# masqués le seront eux aussi.
# Un dossier n'est pas masqué ssi il contient au moins un fichier
# (regular file) ou dossier non masqué.
setopt dotglob
dohide() {
@ -19,7 +26,7 @@ dohide() {
si=$(($si-1))
dohide "${subdirs[si]}"
done
for x in *(N); do
for x in *(/,.NoN); do # N = pas d'erreur quand vide, oN = order none, / = dossiers, . = fichiers
if [ "${x[0,2]}" != ".%" ]; then
pseudo_empty="0"
break;

View File

@ -42,14 +42,19 @@ unset supprimable
n=0
orig=""
q="'\\''" # escaped quote.
sort | while read ab; do
#sort | \
while read ab; do
sum="${ab%% *}"
nom="${ab#* }"
if [ "$sum" != "$oldsum" ]; then
if [ -n "$orig" ]; then
for i in "${supprimable[@]}"; do
if diff -q "$orig" "$i" > /dev/null; then
echo "rm '${i//\'/$q}'"
if [ -e "$orig" ] && [ -e "$i" ] && cat "$i" | diff -q "$orig" - > /dev/null; then
destdir="delete/${i%/*}"
[ -e "$destdir" ] || mkdir -p "$destdir"
mv -i "$i" "$destdir"
echo -n '.'
#echo "myrm '${i//\'/$q}'"
fi
done
fi

48
remdoubles.py Executable file
View File

@ -0,0 +1,48 @@
#!/usr/bin/python
import sys
import os
import errno
import shutil
def identicalFiles(pathA, pathB):
bufsize = 4096
with open(pathA, 'rb') as a:
with open(pathB, 'rb') as b:
while True:
dataA = a.read(bufsize)
dataB = b.read(bufsize)
if dataA != dataB:
return False
if not dataA:
return True
oldhash = ""
original = ""
supprimable = []
for line in sys.stdin:
hash = line[0:48]
file = line[50:-1]
if hash != oldhash:
if original != "":
for i in supprimable:
print i
if os.path.exists(i) and identicalFiles(original, i):
destfile = "delete/" + i
try:
os.makedirs(os.path.dirname(destfile))
except OSError as e:
if e.errno == errno.EEXIST:
pass
else:
raise
shutil.move(i, destfile);
supprimable = []
original = ""
if file[0:2] == 'c/': # Delete files in the directory named c
supprimable.append(file)
else:
if original == "" and os.path.exists(file):
original = file
oldhash = hash

12
unhide.py Executable file
View File

@ -0,0 +1,12 @@
#!/usr/bin/python
import shutil;
import sys;
for dir in sys.stdin:
file = sys.stdin.next()
if file[0:2] == ".%":
dir = dir[:-1]
file = file[:-1]
shutil.move(dir + '/' + file, dir + '/' + file[2:])
print "",

3
unhide.py.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/bash
find "$@" -depth -name '.%*' -printf '%h\n%f\n' | ./unhide.py

3
unhide.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/bash
find "$@" -depth -name '.%*' | while read ab; do aa="${ab##*/}"; mv -i "$ab" "${ab%/*}/${aa#.%}"; echo -n .; done