Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.4
openclipart
clean-up-sources.sh
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File clean-up-sources.sh of Package openclipart
#!/bin/sh usage() { echo "This script cleans up the png sources." echo echo "It removes some broken or unwanted pictures, symlinks duplicates," echo "and moves some pictures to a better location" echo echo "Usage: ${0##*/}" PNG_HOME } if test "$1" = "--help" -o -z "$1" -o ! -d "${DESTDIR}$1" ; then usage exit 1 fi PNG_HOME="$1" move_dir() { target="$1" source="$2" mv -v "$source" "$target" || exit 1; } move_pictures() { target="$1"; shift; mv -v "$@" "$target" || exit 1; # move also the correspondig svg files mv -v `echo "$@" | sed "s|\.png|.svg|g"` "$target" || exit 1; } remove_picture() { file="$1" rm -v "$file" || exit 1; # remove also the corresponding svg file rm -v `echo "$file" | sed "s|\.png|.svg|g"` || exit 1; } link_picure() { prim_path="$1" candidate="$2" filename_png="$3" filename_svg=`echo "$filename" | sed "s|\.png|.svg|g"` for filename in "$filename_png" "$filename_svg" ; do rm -v $candidate/$filename || exit 1; ln -svf ${prim_path#$DESTDIR}/$filename $candidate/$filename || exit 1; done } pic_broken_png=" animals/birds/acquila_architetto_franc_04.png animals/birds/penguin/tux_didier_fabert_01.png animals/birds/duck_yellow_ii_kurt_cagl_.png computer/icons/button2_fudriot_omic.ch_01.png computer/icons/gnome-mime-application-x-tar.png computer/icons/etiquette-theme/gnome-mime-application-x-tar.png computer/icons/flat-theme/action/pen_style_nopen.png computer/tux_didier_fabert_01.png electronics/filmphoto1_fudriot_omic._01.png electronics/filmphoto2_fudriot_omic._01.png electronics/bulb/light_bulb_karl_bartel_01.png geography/tasmania-*.png office/manuscriot_fudriot_omic._01.png office/telephone/numero_verde_angelo_gelm_01.png people/stylized_yoga_person*.png plants/flowers/fiore_01.png plants/flowers/fiore_02.png recreation/holiday/christmas_light_jasper_v_01.png recreation/party/christmas_light_jasper_v_01.png recreation/sports/stylized_yoga_person*.png recreation/sports/surfboard_jurgen_01.png recreation/sports/badminton_racket_brice_b_01.png science/astronomy/moon_jasper_van_de_grond_01.png shapes/arrows/arrowright_fudriot_omic._01.png signs_and_symbols/aids_ribbon_saint_.png signs_and_symbols/hosta_0_symbol_1m_bwh.png signs_and_symbols/recycle_water_saint_.png signs_and_symbols/sakset2.png signs_and_symbols/teschio_fabio_olivo_01.png signs_and_symbols/teschio_fabio_olivo_02.png special/gradients transportation/redcar_marcelo_caiafa_.png transportation/vehicles/redcar_marcelo_caiafa_.png " pic_less_readable_png=" buildings/homes/house_fudriot_omic.ch_01.png buildings/homes/houses_jon_phillips_01.png computer/icons/button1_fudriot_omic*.png computer/icons/etiquette-theme/mimetypes/gnome-mime-application-x-tar.png shapes/stars/star_*.png " pic_less_usable_png=" computer/icons/collection_of_passport__01.png shapes/callouts/speech_bubbles.png shapes/collection_of_passport__01.png signs_and_symbols/font_samples_revdoug_01.png signs_and_symbols/mpcad_box*.png signs_and_symbols/map_symbols/mapa_stawisk_guziec_.png special/cd_jacket_template_james_01.png special/collection_of_passport__01.png special/poster-example_01.png special/patterns/pattern-dots-square-grid*.png tools/weapons/bullet_hole_linda_kim*.png " pic_controversal=" geography/world_map_01.png geography/world_map_saint_.png signs_and_symbols/flags " pic_double=" animals/bugs/flying_wasp_gerald_g._02.png animals/mammals/bears/sleeping_bear_under_sta_03.png animals/mammals/dog_01_drawn_with_strai_03.png animals/mammals/dog_03_drawn_with_strai_02.png animals/mammals/dog_04_drawn_with_strai_02.png animals/mammals/dog_05_drawn_with_strai_02.png animals/mammals/dog_06_drawn_with_strai_02.png animals/mammals/dog_on_leash_gerald_g._02.png animals/mammals/horses/horse_1_konstantin_r._01.png computer/icons/battery_snuatautisticido_0[2-4].png education/scissors_03.png electronics/battery/battery_snuatautisticido_02.png electronics/battery/battery_snuatautisticido_03.png electronics/battery/battery_snuatautisticido_04.png food/beverages/flower-pot_02.png food/beverages/mug_toh_yen_cheng_02.png food/beverages/alcohol/martini_glass_k_yager_02.png office/scissors_02.png office/scissors_03.png people/elfish_girl_mo_.png people/jazz_enrique_meza_c_02.png people/man_head_mikhail_a.medve_01.png people/my_lovely_baby_enrique_m_02.png people/bodypart/left_foot_print_benji_pa_02.png people/bodypart/right_foot_print_benji_p_02.png plants/flowers/red_flower_03.png plants/trees/evergreen/christmas_tree_02.png recreation/music/fifties_jukebox_gerald_g_02.png recreation/music/jazz_enrique_meza_c_02.png recreation/music/war_drum_enrique_meza_c_02.png recreation/religion/creation_day_?_number_ge_0[2-4].png recreation/religion/discordian_sacred_chao_t_01.png recreation/sports/cronometro_mauro_olivo_0[2-3].png recreation/sports/table_tennis_racquets_o_01r.png signs_and_symbols/elder_sign_nubldoff_0[2-3]r.png signs_and_symbols/elder_sign_nurbldoff_0[1-6]r.png tools/ironing_board_gerald_g._02.png tools/scissors_03.png tools/vavuum_cleaner_-_uprigh_02.png tools/weapons/kallisti-grenade_2_nurbl_01.png " pic_mess=" buttons geography/eiffel_tower_michael_ja_r.png geography/shi_ken_01.png geography/symbol_for_a_church_on__01.png geography/war_drum_enrique_meza_c_0[1-2].png people/bodypart/fawn_mo_01.png recreation/art/airbrush_alejandro_tejad_.png recreation/games/cards/andalusia_01.png recreation/games/cards/jacob_leisler_mo_01.png signs_and_symbols/map_symbols/map_of_poland_guziec_.png shapes/airplane_nicu_buculei_01.png shapes/deer_matt_todd_01.png shapes/fancy_red_button_matt_to_01.png shapes/heart_jon_phillips_01.png shapes/left_foot_print_benji_pa_02.png shapes/right_foot_print_benji_p_02.png shapes/shield_matt_todd*.png shapes/wooden_mallot_benji_park_.png special/logaritmic_diagram_01.png special/examples special/patterns/model-view-controller_ia_01.png tools/compass_01.png unsorted " echo echo "Removing unwanted png files..." echo for path in $pic_broken_png \ $pic_less_readable_png \ $pic_less_usable_png \ $pic_controversal \ $pic_double \ $pic_mess ; do # xargs is necessary because shapes/stars/star_*.png covers too many files echo -n ${DESTDIR}${PNG_HOME}/$path | xargs rm -rv || exit 1; # remove also corresponding svg files path_svg=`echo $path | sed "s|\.png|.svg|g"` echo -n ${DESTDIR}${PNG_HOME}/$path_svg | xargs rm -rfv || exit 1; done echo echo "Moving some wrong sorted png files..." echo pushd ${DESTDIR}${PNG_HOME} move_pictures tools animals/birds/macchina_fotografica_di_01.png || exit 1; move_pictures tools animals/lucchetto_grigio_archite_01.png || exit 1; move_pictures tools animals/lucchetto_ottone_archite_01.png || exit 1; move_pictures tools/weapons animals/fish/kallisti-grenade_1_nurbl_01.png || exit 1; move_pictures signs_and_symbols computer/icons/yang_sergio_luiz_araujo__01.png || exit 1; move_pictures tools geography/spyglass_vladimir_hernan_01.png || exit 1; move_pictures people plants/human_humain_umano_sed_r.png || exit 1; move_pictures electronics recreation/games/cards/audio_cassette_mo_01.png || exit 1; move_pictures people recreation/games/cards/brown_hair_boy_face_mike_02.png || exit 1; move_pictures decorations recreation/games/cards/celtic-vine-corner_steve_01.png || exit 1; move_pictures tools recreation/*scuba_tank*.png || exit 1; move_pictures electronics/bulb shapes/cfbulb_*.png || exit 1; move_pictures signs_and_symbols/awards shapes/clipart_by_nicu_buculei*.png || exit 1; move_pictures decorations shapes/coke_*.png || exit 1; move_pictures signs_and_symbols shapes/fire-ball_benji_park_01.png || exit 1; move_pictures tools shapes/forbici_e_pettine_sci_.png || exit 1; move_pictures decorations shapes/golden_hug_joel_montes_d_.png || exit 1; move_pictures signs_and_symbols shapes/gpride_jean_victor_balin_.png || exit 1; move_pictures signs_and_symbols shapes/h_foot_print_jean_victor_.png || exit 1; move_pictures decorations shapes/orleans_express_*.png || exit 1; move_pictures people shapes/shadow_babe_robert_seitz_01.png || exit 1; move_pictures people shapes/stripper_jarno_vasamaa_01r.png || exit 1; move_pictures people shapes/tangram_erwan_01.png || exit 1; move_pictures people shapes/user_lambda_jean_victor_.png || exit 1; move_pictures signs_and_symbols shapes/arrows/reincarnate_nurbldoff_01r.png || exit 1; move_pictures electronics signs_and_symbols/led/led_rainbow_ganson.png || exit 1; move_pictures electronics signs_and_symbols/led/leds_and_rainbow.png || exit 1; move_dir shapes signs_and_symbols/led || exit 1; popd echo echo "Looking for duplicates..." echo TMP_DIR=`mktemp -d /tmp/openclipart-clean-up.XXXXXXXX` # First, find filenames that are listed more times find ${DESTDIR}${PNG_HOME} -name "*.png" >$TMP_DIR/png_list_full sed "s|^.*/\(.*.png\)$|\1|" $TMP_DIR/png_list_full >$TMP_DIR/png_list_filenames sort $TMP_DIR/png_list_filenames >$TMP_DIR/png_list_filenames_sorted sort -u $TMP_DIR/png_list_filenames >$TMP_DIR/png_list_filenames_sorted_uniq diff -u $TMP_DIR/png_list_filenames_sorted $TMP_DIR/png_list_filenames_sorted_uniq >$TMP_DIR/png_list.diff grep "^-" $TMP_DIR/png_list.diff | grep -v "^---" | sed "s|^-\(.*\)$|\1|" | sort -u >$TMP_DIR/png_list_double # Thereafter, clean up duplicates. # # Notes: # - two files with the same filename could differ in fact # - two same pictures would be included in two different subdirectories; # we should keep only one and make symlinks from the other locations, # for example # symlink: people/a_boy_plays_soccer_01.png -> ../recreation/sports/a_boy_plays_soccer_01.png # - one picture is in a directory and a duplicate is in a subdirectory of this # directory; we should keep only the one with more specific sorting, # for example: # delete: transportation/turn_ahead.png # keep: transportation/roadsigns/turn_ahead.png for filename in `cat $TMP_DIR/png_list_double` ; do duplicate_paths_found=`grep "/$filename$" $TMP_DIR/png_list_full | sed "s|/$filename$||" | sort` primary_paths= for candidate in $duplicate_paths_found ; do # we must generate a new list of primary paths each time because # the current candidate would be a better one primary_paths_new= found=0 for prim_path in $primary_paths ; do if diff -q $candidate/$filename $prim_path/$filename >/dev/null ; then # files are the same candidate_len=${#candidate} if test "${prim_path:0:$candidate_len}" = "$candidate" ; then # the candidate is only prefix to the old primary path, # so remove the candidate as an ugly duplicate remove_picture $candidate/$filename primary_paths_new="$primary_paths_new $prim_path" else prim_path_len=${#prim_path} if test "${candidate:0:$prim_path_len}" = "$prim_path" ; then # the old primary path is only prefix to candidate, # so remove the old prim path as an ugly duplicate remove_picture $prim_path/$filename fi # we always set the candidate as the new primary path # if the candidate is not an ugly duplicate; this trick # help us to search for ugly duplicates (the paths in # $duplicate_paths_found are sorted, so it should be # enough to compare only two sequential paths, ...) primary_paths_new="$primary_paths_new $candidate" fi found=1 else primary_paths_new="$primary_paths_new $prim_path" fi done # add candidate to the list if no same primary file found test "$found" = "0" && primary_paths_new="$primary_paths_new $candidate" # primary_paths="$primary_paths_new" done # replace the more reasonable (not removed) duplicates with symlinks for candidate in $duplicate_paths_found ; do test -f $candidate/$filename || continue; for prim_path in $primary_paths ; do if test "$candidate" != "$prim_path" && \ diff -q $candidate/$filename $prim_path/$filename >/dev/null 2>&1 ; then link_picure "$prim_path" "$candidate" "$filename" fi done done done rm -rf $TMP_DIR echo echo "Removing mess (files that are not pictures)" echo for file in `find ${DESTDIR}${PNG_HOME} -type f | grep -v -e ".png$" -e ".svg$"` ; do rm -v $file || exit 1; done
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor