LPS:Převod upload adresáře mediawiki do hash formátu

Z HelpDesk
Verze z 9. 11. 2009, 11:59, kterou vytvořil Mstrback (diskuse | příspěvky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)

jak praví tato stránka http://www.mediawiki.org/wiki/Manual:$wgHashedUploadDirectory není doporučeno měnit nastavení $wgHashedUploadDirectory pokud jsem již nějaké soubory nahráli. Ale co dělat v případě tom, že se uploadované soubory začnou kupit a zapnout hashování by bylo fajn? Pak je tu úžasný skript

Bash skript

 #!/bin/bash
 
 if [ x$1 == x ] || [ $1 == "help" ]; then
 	echo "Script for building hashed folder structure for Mediawiki upload folder" 
 	echo "Usage: script path"
 	exit
 fi
 
 echo -e "Working directory is $PWD/$1"
 path=`echo $1 | sed s./$..`
 echo -n "Creating backup folder $path.bck: "
 cp -r $1 $path.bck
 echo -e "done \n" 

 for i in `ls -lA $1 | grep -v ^d | awk {'print $9'} ` ; do
	echo -e "Name of file is $i"
	
	hash=`echo -n $i | md5sum | awk {'print $1'}`
	echo -e "it's hash is $hash"
	
	folder1=`echo $hash | cut -b1`
	echo -e "so first folder will be $folder1"
	folder2=`echo $hash | cut -b1-2`
	echo -e "and second folder $folder2"

	echo -n "Creating folders: "
	mkdir -p $1/$folder1/$folder2
	echo -e "done"
	echo -n "Moving file: "
	mv $1/$i $1/$folder1/$folder2
	echo -e "done"
	echo ""
 done

 echo -e "Now taking archive directory\n\n"
 archive="$path/archive"

 for i in `ls -lA $archive | grep -v ^d | awk {'print $9'} ` ; do
	echo -e "Name of file is $i"
	sname=`echo $i | cut -d'!' -f2-`
	echo -e "short name is $sname"
	
	hash=`echo -n $sname | md5sum | awk {'print $1'}`
	echo -e "it's hash is $hash"
	
	folder1=`echo $hash | cut -b1`
	echo -e "so first folder will be $folder1"
	folder2=`echo $hash | cut -b1-2`
	echo -e "and second folder $folder2"

	echo -n "Creating folders: "
	mkdir -p $archive/$folder1/$folder2
	echo -e "done"
	echo -n "Moving file: "
	mv $archive/$i $archive/$folder1/$folder2
	echo -e "done"
	echo ""
 done

Použití

je velmi jednoduché. Zdrojový kod uložíme do souboru a dáme mu práva pro spustitelnost. Pak zavoláme

./skript cesta_k_upload_slozce

Skript nejprve vytvoří záložní složku se stejným jménem a příponou .bck a následně původní složku převede do hash formátu. Pokud je vše ok je možné záložní složku smazat

Errata

1) skript byl vyvíjen na ubuntu při spuštění na debianu byl problém, že příkaz "ls -lA" dává jinak rozmístěné informace je nutné "poladit" číslo vypisovaného sloupce v příkazu awk