commit e6b27d3e859f1133d1a1073c89602b419228b825
parent eccfc292a17c27353af86f0df395a893cdf60761
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Fri, 18 Mar 2011 22:15:11 +0100
Bidouillages sur les scripts, quelques-uns ré-écrits en Python (plus rapide).
Diffstat:
7 files changed, 83 insertions(+), 5 deletions(-)
diff --git a/hidedoubles.sh b/hidedoubles.sh
@@ -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
diff --git a/pseudo-empty-dirs.sh b/pseudo-empty-dirs.sh
@@ -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;
diff --git a/remdoubles b/remdoubles
@@ -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
diff --git a/remdoubles.py b/remdoubles.py
@@ -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
diff --git a/unhide.py b/unhide.py
@@ -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 "",
diff --git a/unhide.py.sh b/unhide.py.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+find "$@" -depth -name '.%*' -printf '%h\n%f\n' | ./unhide.py
diff --git a/unhide.sh b/unhide.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+find "$@" -depth -name '.%*' | while read ab; do aa="${ab##*/}"; mv -i "$ab" "${ab%/*}/${aa#.%}"; echo -n .; done