Форум русскоязычного сообщества Ubuntu


Автор Тема: Скрипт для запрета на изменение всех текстовых файлов кроме внесённых в список  (Прочитано 842 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ase66

  • Автор темы
  • Любитель
  • *
  • Сообщений: 64
    • Просмотр профиля
Нужен скрипт для запрета на изменение всех текстовых файлов кроме внесённых в список

Или приказ sed работать исключительно с файлами внесёнными в список, но строго в указанных директориях. Некоторые файлы из списка могут отсутствовать.

Есть строка скрипта

Код: Bash
  1. find /home/${SUDO_USER:-$USER}/.local/share/applications/ /var/lib/snapd/desktop/applications/ -name '*.desktop' -exec sed -ri 's|^(Icon=)/snap.*|\1|' {} +


Есть список файлов текстовый или csv.

Возможно ли подключить его к этому скрипту?
« Последнее редактирование: 19 Октябрь 2017, 17:00:26 от ase66 »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5330
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Код: Bash
  1. find /home/${SUDO_USER:-$USER}/.local/share/applications/ /var/lib/snapd/desktop/applications/ -name '*.desktop' |
  2. grep -vFf spisok_imya_na_otdelnoy_stroke |
  3. xargs -d '\n' sed -ri 's|^(Icon=)/snap.*|\1|'

Пользователь добавил сообщение 19 Октябрь 2017, 13:19:19:
Код: Bash
  1. find /home/${SUDO_USER:-$USER}/.local/share/applications/ /var/lib/snapd/desktop/applications/ -name '*.desktop' \
  2.     ! -exec bash -c 'grep -q ${0##*/} spisok.txt' {} \; \
  3.     -exec sed -ri 's|^(Icon=)/snap.*|\1|' {} +
*надо только проверить сработает ли «+» или только «;» можно.
« Последнее редактирование: 20 Октябрь 2017, 11:54:49 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ase66

  • Автор темы
  • Любитель
  • *
  • Сообщений: 64
    • Просмотр профиля
Первый вариант вообще не работает, а второй не реагирует на список как в формате txt так и csv.

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5330
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Внимательно прочитали что список должен быть по 1 файлу в строке?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ase66

  • Автор темы
  • Любитель
  • *
  • Сообщений: 64
    • Просмотр профиля

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5330
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
При чем здесь csv? ТЕКСТОВЫЙ файл со списком файлов, где КАЖДЫЙ файл на ОТДЕЛЬНОЙ строке.
Код: HTML
  1. [ ~] > cat d.list
  2. vim
  3. mpv
  4. dio
  5. [ ~] > find .local/ -name *.desktop | grep -vFf d.list | xargs -d '\n' sed -s '1F;/Name=/! d'
  6. .local/share/applications/qutebrowser.desktop
  7. Name=Qutebrowser
  8. GenericName=Vi-like Web Browser
  9. X-GNOME-FullName=Qute Web Browser
  10. .local/share/applications/telegramdesktop.desktop
  11. Name=Telegram Desktop
  12. .local/share/xfce4/helpers/custom-FileManager.desktop
  13. Name=i3-sensible-terminal

Второй скрипт поправил, теперь тоже работает. Только имена должны быть полные: не просто vim, a vim.desktop
« Последнее редактирование: 20 Октябрь 2017, 11:54:37 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ase66

  • Автор темы
  • Любитель
  • *
  • Сообщений: 64
    • Просмотр профиля
Ваш пример показал файлы, и всё.

Мне нужно удалить всё после Icon= в .desktop Причём только для snap. Зачем мне это нужно?
Уменя есть тема иконок, в ней есть иконки для 123 snap программ. Я установил эти программы, получил их .desktop. К сожалению canonical плевать на разработчиков иконок. Во всех .desktop snap путь к иконке прописан вот так Icon=/snap/atom/36/usr/share/pixmaps/atom.png

Т.е. если иконка прописана так:

Icon=atom

Выбранная вами тема иконок покажет свою иконку, а если с прямым путём, то нет.


Решение проблемы - скрипт:

#!/bin/bash

# Script for fixing hardcoded icons. Script fix.sh written and maintained on GitHub
# at https://github.com/Foggalong/hardcode-fixer - addtions welcome!
# This script fix2.sh and tofix2.csv mod. ZMA.

# Copyright (C) 2014
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License (version 3+) as
# published by the Free Software Foundation. You should have received
# a copy of the GNU General Public License along with this program.
# If not, see <http://www.gnu.org/licenses/>.

# Version info
date=201710161  # [year][month][date][extra]

# Locations
local_icon="/home/${SUDO_USER:-$USER}/.local/share/icons/hicolor/48x48/apps/"
local_scalable_icon="/home/${SUDO_USER:-$USER}/.local/share/icons/hicolor/scalable/apps/"
global_apps=("/usr/share/applications/" "/usr/share/applications/antix/" "/usr/share/applications/data/" "/usr/share/applications/kde4/" "/usr/share/applications/kde5/" "/usr/share/apps/konsole/" "/usr/share/mimelnk/application/" "/usr/share/kde4/services/cantor/" "/usr/local/share/applications/" "/usr/local/share/applications/kde4/" "/usr/local/share/applications/kde5/" "/usr/share/xsessions/" "/var/lib/snapd/desktop/applications/")
local_apps=("/home/${SUDO_USER:-$USER}/.local/share/applications/" "/home/${SUDO_USER:-$USER}/.local/share/applications/kde4/" "/home/${SUDO_USER:-$USER}/.local/share/applications/kde5/")
global_icon="/usr/share/icons/hicolor/48x48/apps/"
global_scalable_icon="/usr/share/icons/hicolor/scalable/apps/"
steam_icon="${global_icon}steam.png"

# Allows timeout when launched via 'Run in Terminal'
function gerror() { sleep 3; exit 1; }


# Deals with the flags
if [ -z "$1" ]; then
    mode="fix"
else
    case $1 in
        -l|--local)
            mode="local";;
        -r|--revert)
            echo "This will undo all changes previously made."
            while true; do
                read -r -p "Are you sure you want to continue? " answer
                case $answer in
                    [Yy]* ) mode="revert"; break;;
                    [Nn]* ) exit;;
                    * ) echo "Please answer [Y/y]es or [N/n]o.";;
                esac
            done;;
        -h|--help)
            echo -e \
                "Usage: ./$(basename -- $0) [OPTION]\n" \
                "\rFixes hardcoded icons of installed applications.\n\n" \
                "\rCurrently supported options:\n" \
                "\r  -l, --local \t Only fixes local launchers.\n" \
                "\r  -r, --revert \t Reverts any changes made.\n" \
                "\r  -h, --help \t\t Displays this help menu.\n" \
                "\r  -v, --version \t Displays program version.\n"
            exit 0 ;;
        -v|--version)
            echo -e "$(basename -- $0) $date\n"
            exit 0 ;;
        *)
            echo -e "$(basename -- $0): invalid option -- '$1'"
            echo -e "Try '$(basename -- $0) --help' for more information."
            gerror
    esac
fi

chown "${SUDO_USER:-$USER}" "tofix2.csv"

# Checks for root
if [[ $UID -ne 0 ]] && [ $mode != "local" ]; then
    echo "The script must be run as root to (un)fix global launchers."
    while true; do
        read -r -p "Do you want to continue in local mode? " answer
        case $answer in
            [Yy]* )
                if [ "$mode" == "fix" ]; then
                    mode="local"; break
                elif [ "$mode" == "revert" ]; then
                    mode="l-revert"; break
                fi;;
            [Nn]* ) exit;;
            * ) echo "Please answer [Y/y]es or [N/n]o.";;
        esac
    done
fi

# Itterating over lines of tofix2.csv, each split into an array
IFS=","
while read -r name launcher current new_icon; do
    # Basic corrections
    name=$(echo "$name" | sed -e "s/\r//g")
    launcher=$(echo "$launcher".desktop | sed -e "s/\r//g")
    current=$(echo "$current" | sed -e "s/\r//g")
    new_icon=$(echo "$new_icon" | sed -e "s/\r//g")
    filename=$(basename "$current")
    extension="${filename##*.}"
    # Escape non-standard and special characters in file names by creating a new variable
    old_icon="${current//\\/\\\\}" # escape backslashes
    old_icon="${old_icon//\//\\/}" # escape slashes
    # Fixing code
    if [ "$current" == "hardcoded" ]; then #checks if the icon path is hardcoded
        if [ "$mode" == "local" ]; then
            combined_apps=("${local_apps[@]}")
        else
            combined_apps=("${local_apps[@]}" "${global_apps[@]}")
        fi

        for app_location in "${combined_apps[@]}"
        do
            if [ -f "$app_location$launcher" ] && [ ! -f "$new_current" ] ; then
                new_current=$(grep -Gq "Icon=*$" "$app_location$launcher")
            fi
        done
        if [ -f "$new_current" ];then
            sed -i "s/$name,$launcher,$current,$new_icon/$name,$launcher,$new_current,$new_icon/" "tofix2.csv"
        fi
    fi
    if [ ! -d "$local_scalable_icon" ]; then
        su -c "mkdir '$local_scalable_icon' -p" "${SUDO_USER:-$USER}"
    fi
    if [ ! -d "$local_icon" ]; then
        su -c "mkdir '$local_icon' -p" "${SUDO_USER:-$USER}"
    fi
    if [ "$mode" == "fix" ] || [ "$mode" == "local" ]; then
        # Local & Steam launchers
        for local_app in "${local_apps[@]}"
        do
            if [ -f "$local_app$launcher" ]; then
                if [ "$current" != "steam" ]; then
                    if grep -Gq "Icon=$current$" "$local_app$launcher"; then
                        # Local launchers
                        echo "L: Fixing $name..."
                        if [ -f "$current" ]; then # checks if icon exists to copy
                            if [ ! -d "$local_icon" ]; then
                                su -c "mkdir '$local_icon' -p" "${SUDO_USER:-$USER}"
                            fi
                            if [ "$extension" == "png" ] || [ "$extension" == "xpm" ];then
                                if [ ! -f "$local_icon$new_icon" ];then
                                    cp "$current" "$local_icon$new_icon"
                                fi
                            fi
                            if [ "$extension" == "svg" ];then
                                if [ ! -f "$local_scalable_icon$new_icon" ];then
                                    cp "$current" "$local_scalable_icon$new_icon"
                                fi
                            fi
                        fi
                        sed -i "s/Icon=${old_icon}.*/Icon=$new_icon/" "$local_app$launcher"
                    fi
                else
                    # Steam launchers
                    if [ -f "$steam_icon" ]; then # checks if steam icon exists to copy
                        if grep -Gq "Icon=$current$" "$local_app$launcher"; then
                            echo "S: Fixing $name..."
                            if [ ! -d "$local_icon" ]; then
                                su -c "mkdir '$local_icon' -p" "${SUDO_USER:-$USER}"
                            fi
                            if [ ! -f "$local_icon${new_icon}.png" ];then
                                cp "$steam_icon" "$local_icon${new_icon}.png"
                            fi
                            sed -i "s/Icon=steam.*/Icon=$new_icon/" "$local_app$launcher"
                        fi
                    fi
                fi
            fi
        done
        # Global launchers
        for global_app in "${global_apps[@]}"
        do
            if [ $mode != "local" ] && [ -f "$global_app$launcher" ]; then
                if grep -Gq "Icon=$current$" "$global_app$launcher"; then
                    echo "G: Fixing $name..."
                    if [ -f "$current" ]; then # checks if icon exists to copy
                        if [ "$extension" == "png" ] || [ "$extension" == "xpm" ];then
                            if [ ! -f "$global_icon$new_icon" ] ;then
                                cp "$current" "$global_icon$new_icon"
                            fi
                        fi
                        if [ "$extension" == "svg" ];then
                            if [ ! -f "$global_scalable_icon$new_icon" ];then
                                cp "$current" "$global_scalable_icon$new_icon"
                            fi
                        fi
                    fi
                    sed -i "s/Icon=${old_icon}.*/Icon=$new_icon/g" "$global_app$launcher"
                fi
            fi
        done
    # Reversion code
    elif [ "$mode" == "revert" ] || [ "$mode" == "l-revert" ]; then
        # Local revert
        for local_app in "${local_apps[@]}"
        do
            if [ -f "$local_app$launcher" ]; then
                if grep -Gq "Icon=$new_icon$" "$local_app$launcher"; then
                    echo "F: Reverting $name..."
                    rm -f "$local_icon$new_icon"*
                    rm -f "$local_scalable_icon$new_icon"*
                    sed -i "s/Icon=${new_icon}.*/Icon=$old_icon/" "$local_app$launcher"
                fi
            fi
            # Steam revert
            if [ -f "$local_app$launcher" ] && [ -f "$steam_icon" ]; then
                if grep -Gq "Icon=$new_icon$" "$local_app$launcher"; then
                    echo "S: Reverting $name..."
                    rm -f "$local_icon$new_icon"*
                    rm -f "$local_scalable_icon$new_icon"*
                    sed -i "s/Icon=${new_icon}.*/Icon=$old_icon/" "$local_app$launcher"
                fi
            fi
        done
        # Global revert
        for global_app in "${global_apps[@]}"
        do
            if [ $mode != "l-revert" ] && [ -f "$global_app$launcher" ]; then
                if grep -Gq "Icon=$new_icon$" "$global_app$launcher"; then
                    echo "G: Reverting $name..."
                    rm -f "$global_icon$new_icon"*
                    rm -f "$global_scalable_icon$new_icon"*
                    sed -i "s/Icon=${new_icon}.*/Icon=$old_icon/" "$global_app$launcher"
                fi
            fi
        done
    fi
done < "tofix2.csv"

К нему есть список исправлений на 1279 программ tofix2.csv, где иконки жёстко привязаны к своим папкам. Здесь показана только часть, весь не влезает в сообщение:

Application,Launcher,Path,Icon Name
2048,2048,/usr/share/2048/meta/apple-touch-icon.png,2048
1-to-1 Assistance,1-to-1_assistance,1-to-1_assistance.png,1-to-1_assistance
1-to-1 Voice,1-to-1_voice,1-to-1_voice.png,1-to-1_voice
2048-Qt,2048-qt,/usr/share/pixmaps/2048-qt.xpm,2048-qt
3D Acceleration,driconf,/usr/share/driconf/driconf-icon.png,driconf-icon
4Pane,4Pane,/usr/share/4Pane/bitmaps/4PaneIcon48.png,4Pane
8BitMMO,8BitMMO,steam,steam_icon_250420
Aard Dictionary,aarddict,aarddict.png,aarddict
AB-Transfers,abtransfers,/usr/share/abtransfers/bank/transfer/128x128.png,abtransfers
Account authentication,signon-ui,,preferences-login
AClock,AClock,/usr/lib/GNUstep/Applications/AClock.app/Resources/AClock.tiff,aclock.app
AClock,AClock,/usr/lib/GNUstep/Applications/AClock.app/Resources/clock.png,AClock
Aconnectgui,aconnectgui,/usr/share/pixmaps/aconnectgui.xpm,aconnectgui
ADSL/PPPOE configuration,pppoeconf,/usr/share/pixmaps/pppoeconf.xpm,pppoeconf
Adun,UL,/usr/lib/GNUstep/Applications/UL.app/Resources/icon.tiff,Adun
Advene Video annotation,advene,/usr/share/advene/pixmaps/icon_advene32.png,advene
AfterStep,AfterStep,/usr/share/afterstep/desktop/icons/large/AfterStep3,AfterStep3
Aghermann,aghermann,@PKGDATADIR@/aghermann.png,aghermann
Ajuda do Receitanet,rfb-receitanet-ajuda,/opt/Programas RFB/Receitanet/imagens/Ajuda.xpm,Ajuda
All Video Downloader,allvideodownloader,/opt/allvideodownloader/icons/allvideodownloader.png,allvideodownloader
AllTray 0.7.5.1dev,alltray,alltray.png,alltray

Однако в этот список нельзя добавить правила для snap из-за слишком частых обновлений.
Со snap не было бы проблем если бы при каждом обновлении программ не изменялся бы путь к иконке - /snap/atom/36,  37, 38 и т.д.
 
Команда добавленная в скрипт:

# Faking Canonical snap

find /home/${SUDO_USER:-$USER}/.local/share/applications/ /var/lib/snapd/desktop/applications/ -name '*.desktop' -exec sed -ri 's|^(Icon=)/snap.*|\1|' {} +

и правила в tofix2.csv :

AnimationMaker,animationmaker_animationmaker,,animationmaker-snap
Archaeopteryx,archaeopteryx_archaeopteryx,,archaeopteryx-snap
Atom,atom_atom,,atom-snap
Atomify LAMMPS,atomify_atomify,,atomify-snap
Audovia,audovia_Audovia,,audovia-snap
B1 Free Archiver,b1freearchiver_b1,,b1-snap
Balloon Pop,balloon-pop_snap,,balloon-pop-snap
Baugeschichte,baugeschichte_baugeschichte,,baugeschichte-snap
Bayam,bayam_bayam,,bayam-snap
BitTicker,bitticker_bitticker,,bittickerlogo-snap
Bubble Pop,bubble-pop_snap,,bubble-pop-snap
Bucklespring,bucklespring_buckle,,bucklespring-snap
Buka,buka_buka,,buka-snap
Bussard,bussard_bussard,,bussard-snap
Chinese Calendar,chinese-cal_chinese-calendar,,chinesecalendar-snap
ChronoBurn Calorie Counter,chronoburn_chronoburn,,chronoburn-snap
CloudCompare Viewer,cloudcompare_ccViewer,,ccViewer-snap
CloudCompare,cloudcompare_cloudcompare,,cloudcompare-snap
cloudtag,cloudtag_cloudtag,,cloudtag-snap
codebreakers,codebreakers_codebreakers,,codebreakers-snap
Collision,collision_collision,,collision-snap
4 in a Line,connect4_snap,,connect4-snap
CubicSDR,cubicsdr-casept_cubicsdr,,cubicsdr-snap
Cuety,cuety_Cuety,,Cuety-snap
Habitica,desktop-habitica_desktop-habitica,,habitica-snap
devRantron,devrantron_devrantron,,devrantron-snap
Discord,discord_discord,,discord-snap
DOSBox Emulator,dosbox-jz_dosbox-jz,,dosbox-snap
DRAKON,drakon_drakon,,drakon-snap
Duck Marines,duckmarines_duckmarines,,duckmarines-snap
Dwarf Fortress,dwarf-fortress_dwarf-fortress,,dwarf-fortress-snap
Bricks,explode-bricks_snap,,bricks-snap
HexGL,fcole90-hexgl-webapp_fcole90-hexgl-webapp,,hexgl-snap
FS-UAE Launcher,fsuae_launcher,,fsuae-snap
Recipes,gnome-recipes_gnome-recipes,,org.gnome.Recipes-snap
Hanoi Towers,hanoi-towers_HanoiTower,,hanoi-towers-snap
Hellosound,hellosound_hellosound,,hellosound-snap
HelloUnity,hello-unity_hello-unity,,hello-unity-snap
hexexplorer-snap,hexexplorer-snap_hexexplorer-snap,,hexexplorer-snap
Hiri,hiri_hiri,,hiri-snap
hswitch,hswitch_hswitch,,hswitch-snap
Instagraph,instagraph_instagraph,,instagraph-snap
Investement-Viewer,investment-viewer_investment-viewer,,investment-viewer-snap
IRCCloud,irccloud-desktop_irccloud-desktop,,irccloud-desktop-snap
jimbodicomviewer,jimbodicomviewer_jimbodicomviewer,,jimbo-snap
jTileDownloader,jtiledownloader_jtiledownloader,,jtiledownloader-snap
Kanagame,kanagame_kanagame,,kanagame-snap
Kihvim,kihvim_prat,,kihvim-snap
Kiosc Editor,kiosceditor_VisualProductionsKioscEditor,,kiosceditor-snap
Kiosc,kiosc_VisualProductionsKiosc,,kiosc-snap
Konstructs,konstructs-client_konstructs-client,,konstructs-client-snap
krop,krop_krop,,krop-snap
Ktube Media Downloader,ktube-media-downloader_ktube-media-downloader,,ktube-media-downloader-snap
LaidOut,laidout_laidout,,laidout-snap
Langly,langly_langly,,langly-snap
LanguageTool,languagetool_languagetool,,languagetool-snap
LBRY,lbry_lbry,,lbry-snap
Level9,level9_glklevel9,,level9-snap
Level9,level9_level9,,level9-snap
Lindacoin Wallet,lindacoin-wallet_lindacoin-wallet,,lindacoin-wallet1-snap
magnesium,magnesium_magnesium,,magnesium-snap
mkvinfo,matroska-tools_mkvinfo,,mkvinfo-snap
MKVToolNix GUI,matroska-tools_mkvtoolnix-gui,,matroska-tools-snap
MediaConch,mediaconch-gui_mediaconch-gui,,mediaconch-snap
mendiApp,mendiapp_mendiapp,,mendiapp-snap
Minecraft,minecraft-nsg_minecraft-nsg,,minecraft-nsg-snap
Minetest,minetest-luk3yx_minetest,,minetest-snap
MoonPlayer,moonplayer_moonplayer,,moonplayer-snap
Mountain Tapir Collage Maker,mountain-tapir_mountain-tapir,,mountain-tapir-snap
Mr. Rescue,mrrescue_mrrescue,,mrrescue-snap
namebench,namebench-snap_namebench-snap,,namebench-snap
nanowallet,nanowallet_nanowallet,,nanowallet-snap
Neuronify,neuronify_neuronify,,neuronify-snap
Neutron Wallet,neutroncoin-wallet_neutroncoin-wallet,,neutroncoin-wallet-snap
Neverbore Picross,neverbore_neverbore,,neverbore-snap
Nitrokey App,nitrokey-app_nitrokey-app,,nitrokey-app-snap
noson,noson_noson,,noson-snap
OpenMapper,openmapper-desktop_openmapper,,openmapper-snap
Calculator,orangecalc_orangecalc,,oc-snap
Oracle Data Modeler,osddm_datamodeler,,osddm-snap
PAC,pac-vs_pac,,pac-vs-snap
PencilSheep,pencilsheep_pencilsheep,,pencilsheep-snap
Pin-Town,pin-town_pin-town,,pin-town-snap
Planet Lander,planetlander_planetlander,,planetlander-snap
PockIt,pockit_pockit,,pockit-snap
Pubip IPv4,pubip_pubip_ipv4,,pubip-ipv4-snap
Pubip IPv6,pubip_pubip_ipv6,,pubip-ipv6-snap
PyCharm,pycharm-community_pycharm-community,,pycharm-snap
Checkers,qcheckers_qcheckers,,checkers-snap
QOwnNotes,qownnotes_QOwnNotes,,QOwnNotes-snap
QStamina,qstamina-snap_Qstamina,,qstamina-snap
Reversi,reversu_snap,,reversu-snap
rockscissorspaperlizardspock-snap,rockscissorspaperlizardspock-snap_rockscissorspaperlizardspock-snap,,rockscissorspaperlizardspock-snap
RokuGtk,rokugtk_rokugtk,,rokugtk-snap
RPG Dice Roller,rpgdiceroller_rpgdiceroller,,dice-snap
Rube Cube,rubecube_rubecube,,rubecube-snap
SafeX Wallet,safex-wallet_safex-wallet,,safex-wallet-snap
ScreenCloudPlayer,screencloudplayer_screencloudplayer,,screencloudplayer-snap
Sensor Monitor,sensors-unity_sensors-unity,,sensors-unity-snap
Siilihai,siilihai-client_siilihai-client,,siilihai-snap
Simplekey,simplekey_simplekey,,simplekey-snap
Skrifa Lite,skrifa-lite_skrifa-lite,,skrifa-lite-snap
Skrifa,skrifa_skrifa,,skrifa-snap
SmallTextPad,smalltextpad_smalltextpad,,smalltextpad-snap
Solitaire,solitaire_snap,,solitaire-snap
supercalc,supercalc-snap_Supercalc-Snap,,supercalc-snap
Sword,sword_sword,,sword-snap
Symmetry Group Madness,symgrpmad_symgrpmad,,symgrpmad-snap
Tea Time,teatime_teatime,,teatime-snap
Termius-App,termius-app_termius-app,,termius-app-snap
Tetris in Racket,tetris-in-racket_tetris-em-racket,,tetris-in-racket-snap
TheTravelingFox,the-traveling-fox_the-traveling-fox,,the-traveling-fox-snap
TruthTables,truthtables_truthtables,icon48x48.png,truthtables-snap
Twisty Puzzle,twistypuzzle_twistypuzzle,,twistypuzzle-snap
Ubuntu Social Kit,ubuntu-social-kit_ubuntu-social-kit,,ubuntu-social-kit-snap
Vestin,vestin_vestin,,vestin-snap
VLC media player,vlc_vlc,,vlc-snap
Volleyball 2D,volleyball2d_volleyball2d,,volleyball2d-snap
WallpaperDownloader,wallpaperdownloader_wallpaperdownloader,,wallpaperdownloader-snap
Wavebox,wavebox_wavebox,,wavebox-snap
XnView Sketch,xnsketch_xnsketch,,xnsketch-snap
yacas-gui,yacas_yacas-gui,yacas-gui.png,yacas-gui-snap
ZZT,zzt_zzt,,zzt-snap

решили проблему snap, но слишком грубо.

Все не известные мне и не прописанные в tofix2.csv  snap .desktop  окажутся без иконок.

Мне нужно применить скрипт Faking Canonical snap исключительно по списку известных мне .desktop snap - tofix-snap.csv:

atom_atom.desktop
 vlc_vlc.desktop
 gnome-recipes_gnome-recipes.desktop
 the-traveling-fox_the-traveling-fox.desktop
 discord_discord.desktop
 wavebox_wavebox.desktop
 hiri_hiri.desktop
 animationmaker_animationmaker.desktop
 atomify_atomify.desktop
 b1freearchiver_b1.desktop
 baugeschichte_baugeschichte.desktop
 bitticker_bitticker.desktop
 bayam_bayam.desktop
 bucklespring_buckle.desktop
 buka_buka.desktop
 chronoburn_chronoburn.desktop
 chinese-cal_chinese-calendar.desktop
 cloudtag_cloudtag.desktop
 codebreakers_codebreakers.desktop
 cloudcompare_ccViewer.desktop
 cloudcompare_cloudcompare.desktop
 collision_collision.desktop
 cubicsdr-casept_cubicsdr.desktop
 cuety_Cuety.desktop
 desktop-habitica_desktop-habitica.desktop
 devrantron_devrantron.desktop
 dosbox-jz_dosbox-jz.desktop
 duckmarines_duckmarines.desktop
 drakon_drakon.desktop
 dwarf-fortress_dwarf-fortress.desktop
 fcole90-hexgl-webapp_fcole90-hexgl-webapp.desktop
 fsuae_launcher.desktop
 hanoi-towers_HanoiTower.desktop
 hello-unity_hello-unity.desktop
 hellosound_hellosound.desktop
 hexexplorer-snap_hexexplorer-snap.desktop
 hswitch_hswitch.desktop
 instagraph_instagraph.desktop
 investment-viewer_investment-viewer.desktop
 irccloud-desktop_irccloud-desktop.desktop
 jtiledownloader_jtiledownloader.desktop
 kanagame_kanagame.desktop
 jimbodicomviewer_jimbodicomviewer.desktop
 ktube-media-downloader_ktube-media-downloader.desktop
 kiosceditor_VisualProductionsKioscEditor.desktop
 kiosc_VisualProductionsKiosc.desktop
 level9_glklevel9.desktop
 level9_level9.desktop
 laidout_laidout.desktop
 langly_langly.desktop
 lbry_lbry.desktop
 lindacoin-wallet_lindacoin-wallet.desktop
 kihvim_prat.desktop
 languagetool_languagetool.desktop
 magnesium_magnesium.desktop
 mendiapp_mendiapp.desktop
 matroska-tools_mkvinfo.desktop
 matroska-tools_mkvtoolnix-gui.desktop
 mediaconch-gui_mediaconch-gui.desktop
 minetest-luk3yx_minetest.desktop
 minecraft-nsg_minecraft-nsg.desktop
 mountain-tapir_mountain-tapir.desktop
 moonplayer_moonplayer.desktop
 mrrescue_mrrescue.desktop
 neutroncoin-wallet_neutroncoin-wallet.desktop
 neverbore_neverbore.desktop
 nanowallet_nanowallet.desktop
 namebench-snap_namebench-snap.desktop
 neuronify_neuronify.desktop
 noson_noson.desktop
 pycharm-community_pycharm-community.desktop
 pubip_pubip_ipv4.desktop
 pubip_pubip_ipv6.desktop
 planetlander_planetlander.desktop
 pencilsheep_pencilsheep.desktop
 openmapper-desktop_openmapper.desktop
 orangecalc_orangecalc.desktop
 pockit_pockit.desktop
 osddm_datamodeler.desktop
 qcheckers_qcheckers.desktop
 qownnotes_QOwnNotes.desktop
 qstamina-snap_Qstamina.desktop
 rokugtk_rokugtk.desktop
 rockscissorspaperlizardspock-snap_rockscissorspaperlizardspock-snap.desktop
 rpgdiceroller_rpgdiceroller.desktop
 screencloudplayer_screencloudplayer.desktop
 sensors-unity_sensors-unity.desktop
 safex-wallet_safex-wallet.desktop
 siilihai-client_siilihai-client.desktop
 simplekey_simplekey.desktop
 skrifa_skrifa.desktop
 smalltextpad_smalltextpad.desktop
 skrifa-lite_skrifa-lite.desktop
 supercalc-snap_Supercalc-Snap.desktop
 teatime_teatime.desktop
 symgrpmad_symgrpmad.desktop
 sword_sword.desktop
 tetris-in-racket_tetris-em-racket.desktop
 termius-app_termius-app.desktop
 volleyball2d_volleyball2d.desktop
 vestin_vestin.desktop
 ubuntu-social-kit_ubuntu-social-kit.desktop
 wallpaperdownloader_wallpaperdownloader.desktop
 zzt_zzt.desktop
 xnsketch_xnsketch.desktop
 archaeopteryx_archaeopteryx.desktop
 audovia_Audovia.desktop
 balloon-pop_snap.desktop
 bubble-pop_snap.desktop
 connect4_snap.desktop
 bussard_bussard.desktop
 explode-bricks_snap.desktop
 konstructs-client_konstructs-client.desktop
 krop_krop.desktop
 nitrokey-app_nitrokey-app.desktop
 pin-town_pin-town.desktop
 reversu_snap.desktop
 rubecube_rubecube.desktop
 solitaire_snap.desktop
 twistypuzzle_twistypuzzle.desktop
 yacas_yacas-gui.desktop
 mimeinfo.cache
 pac-vs_pac.desktop

Пусть все новые snap, остаются без изменений пока я не создам для них иконку и не внесу их в список tofix-snap.csv и в tofix2.csv

Тема иконок для теста Снежок - https://yadi.sk/d/kVzafq1ptMV4R (Самая полная тема иконок программ для Linux какую я только знаю).

О snap. Snap от canonical очень сырой продукт. Команда snap find должна показать все доступные программы, и к сожалению этого не делает. Можно набрать её, глянуть на список, а потом для примера набрать это - snap find vlc
Результат налицо.


Это то что нашёл я (команда на массовую установку Snap, закачка 15 Гб и на диске нужно не менее 25 Гб свободного места):

sudo snap install ahorcado animationmaker brackets heroku go teleconsole hiri discord wavebox lxd rocketchat-server nextcloud arangodb3 askgod atomify avahi awsiot b1freearchiver baugeschichte bayam bcc bitticker blr-says bluez bucklespring buka cactpot-solver canonical-livepatch cashbox-nextcloud cassandra the-traveling-fox chinese-cal chronoburn ci-dice cloudcompare cloudtag codebreakers collision conn-check couchdb cpustat cuberite cubicsdr-casept cuety currate dark-knight dash-shell desktop-habitica devrantron dnsmasqd docker doctl dosbox-jz dragonboard drakon duckmarines dwarf-fortress ejabberd fcole90-hexgl-webapp frr fsuae glances gnome-3-24 gnuchess go14-lbo go-example-webserver gogs hanoi hanoi-towers hello-unity hello-world hellosound hexexplorer-snap hexpad home-assistant-escoand hswitch hugo i2pd instagraph investment-viewer iota-mwc17 irccloud-desktop jenkins jimbodicomviewer jtiledownloader juego-elecciones justsurfinthenet kanagame kde-frameworks-5 kihvim kiosc kiosceditor laidout langly languagetool lbry level9 lindacoin-wallet littlewatcher livetuner locationd lonewolf lxd magic-device-tool magnesium matroska-tools mediaconch-gui mendiapp meta-maas metatron minecraft-nsg minetest-luk3yx moonplayer mountain-tapir mqttsrv mrrescue namebench-snap nanowallet nats-server neuronify neutroncoin-wallet neverbore noson numnom ogre ohmygiraffe omegat-cat onos open-solitaire-classic openhab openmapper-desktop openmvg orangecalc osddm packageproxy packer pencilsheep planetlander pocketmine-server-manager pockit podpublish pubip qcheckers qimo-wallpapers qownnotes qstamina-snap quagga rockscissorspaperlizardspock-snap rokugtk rokuterm rpgdiceroller safex-wallet sassc screencloudplayer sdlvnc sensors-unity sensortag sentry shadowsocks siilihai-client simplekey skrifa skrifa-lite smalltextpad snapweb snow-on-me soracom spreedme ss-qt stonscipap-snap storjshare stress-ng supercalc-snap surl sword symgrpmad teatime telegram-cli termius-app terraform-abacao test-snapd-tools tetris-in-racket tidec tinyproxy-snap tmx tof-casept torgo tpad ttimer ubuntu-calculator-app ubuntu-clock-app ubuntu-social-kit upnp-server vestin vitetris volleyball2d wallpaperdownloader wavebox webdm wekan wireless-tools wuziqi x86rdrand-benchmark xkcd-webserver xnsketch zeronet zile-tealeg zzt audovia archaeopteryx balloon-pop beagleblack bubble-pop bussard connect4 convos emoj explode-bricks gnss-sdr-next hello-node-snap http induscover javagame konstructs-client krop lci moon-buggy nitrokey-app nikola  openstack-cli packer-abacao pi2 pin-town quagga-lool reversu rubecube serial-vault snappy-debug solitaire store-test-ubuntu-desktop thinger-maker-server truthtables uappexplorer-cli twistypuzzle yd john-the-ripper predix-ts-sample pac-vs yacas hello-railarem
Если застрянет, значит помер один снапов, можно ставить десятками пока не найдёте на чём застревает.

Snap с особым параметром:

sudo snap install anbox-installer --classic
sudo snap install aws-cli --classic
sudo snap install bower --classic
sudo snap install canonical-doc-utils --classic
sudo snap install fades --classic
sudo snap install jq-cprov --classic
sudo snap install juju-act --classic
sudo snap install ktube-media-downloader --classic
sudo snap install pycharm-community --classic
sudo snap install python0 --classic
sudo snap install ubuntu-make --classic
sudo snap install hollywood --classic
sudo snap install wal-e --classic

Snap после установки подключается как тип squashfs в /dev/loop0,1,2 и т.д.
« Последнее редактирование: 26 Октябрь 2017, 11:14:05 от ase66 »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5330
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Ваш пример показал файлы, и всё.
Пример показал что скрипт рабочий и отбирает именно то что нужно.
Теперь в скрипте sed можете делать с ними что требуется. Если надо удалить пути:
Код: Bash
  1. sed -i '/Icon\s*=\s*\/snap/s/=.*\//=/'
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ase66

  • Автор темы
  • Любитель
  • *
  • Сообщений: 64
    • Просмотр профиля
Уважаемый Azure!

1. Создайте пожалуйста два вот таких одинаковых .desktop

[Desktop Entry]
Name=Atom
Comment=A hackable text editor for the 21st Century.
GenericName=Text Editor
Exec=env BAMF_DESKTOP_FILE_HINT=/var/lib/snapd/desktop/applications/atom_atom.desktop /snap/bin/atom %U
Icon=/snap/atom/36/usr/share/pixmaps/atom.png
Type=Application
StartupNotify=true
Categories=GNOME;GTK;Utility;TextEditor;Development;
MimeType=text/plain;

Первый назовите atom_atom.desktop, а втрой atom_atom2.desktop

Поместите их в .local/share/applications


2. Создайте  spisok.txt с одной строкой:  atom_atom

Главная цель это ограничить работу вот этого скрипта:
find /home/${SUDO_USER:-$USER}/.local/share/applications/ /var/lib/snapd/desktop/applications/ -name '*.desktop' -exec sed -ri 's|^(Icon=)/snap.*|\1|' {} +

Ограничение (целиком, или только для find, или для sed) заключается в списке spisok.txt
Скрипт должен действовать в указанных папках но строго по .desktop из spisok.txt и больше ничего не трогать.

Примените по ним предлагаемый Вами вариант скрипта.
 
После применения в atom_atom.desktop должна быть пустая строка после Icon=

atom_atom2.desktop должен остаться вообще без каких либо изменений.
« Последнее редактирование: 23 Октябрь 2017, 12:54:24 от ase66 »

Оффлайн renzrv

  • Старожил
  • *
  • Сообщений: 1832
    • Просмотр профиля
ase66,
Посмотри что выводит
find /home/${SUDO_USER:-$USER}/.local/share/applications/ /var/lib/snapd/desktop/applications/ -name '*.desktop'потом путь к atom_atom.desktop добавь в spisok.txt и выполни команду:
find /home/${SUDO_USER:-$USER}/.local/share/applications/ /var/lib/snapd/desktop/applications/ -name '*.desktop' \
| grep -Ff /путь/до/spisok.txt \
| xargs -d '\n' sed -ri 's|^(Icon=)/snap.*|\1|'
Скрипты на bash,sh,perl,awk + разная помощь (в ЛС)

Оффлайн ase66

  • Автор темы
  • Любитель
  • *
  • Сообщений: 64
    • Просмотр профиля
К сожалению Icon= в atom_atom2.desktop опять пустой как и в atom_atom.desktop Т.е. нет ограничения работы по списку.

atom_atom.desktop может быть как в .local/share/applications/ так и в /var/lib/snapd/desktop/applications, в каждой папке (в двух экземплярах), или вообще отсутствовать. Это зависит от способа установки, - глобально или с параметром -user. Большинство пользователей вообще не будут ставить atom через snap.

Цель скрипта (поставляемого с темой иконок) работа с неопределенными параметрами. Они всегда будут разными.

Посмотрите для примера как решён вопрос проверки имени .desktop ($launcher), сопоставления и замены строк Icon= в главном скрипте:

        if [ -f "$new_current" ];then
            sed -i "s/$name,$launcher,$current,$new_icon/$name,$launcher,$new_current,$new_icon/" "tofix2.csv"
        fi

Может что-то подобное?
« Последнее редактирование: 23 Октябрь 2017, 15:40:09 от ase66 »

Оффлайн renzrv

  • Старожил
  • *
  • Сообщений: 1832
    • Просмотр профиля
Тогда замени
grep -Ffна
grep -f
и в spisok.txt удали все и вставь строку
.*/applications/atom_atom.desktop$
Скрипты на bash,sh,perl,awk + разная помощь (в ЛС)

Оффлайн ase66

  • Автор темы
  • Любитель
  • *
  • Сообщений: 64
    • Просмотр профиля
Тот же результат. Оба .desktop с Icon=.

Оффлайн renzrv

  • Старожил
  • *
  • Сообщений: 1832
    • Просмотр профиля
Это у тебя где-то ошибка.
Что выдает
cat spisok.txtecho /var/lib/snapd/desktop/applications/atom_atom.desktop | grep -f spisok.txtecho /var/lib/snapd/desktop/applications/atom_atom2.desktop | grep -f spisok.txt?
Скрипты на bash,sh,perl,awk + разная помощь (в ЛС)

Оффлайн ase66

  • Автор темы
  • Любитель
  • *
  • Сообщений: 64
    • Просмотр профиля
Я работаю в локале чтобы не укокошить глобал.

cat spisok.txt
animationmaker_animationmaker
archaeopteryx_archaeopteryx
atom_atom
vlc_vlc
vlc_vlс.desktop

с одним .*/applications/atom_atom.desktop$ в spisok.txt всё тот же результат оба .desktop пусты после Icon=

echo /home/xx/.local/share/applications/atom_atom.desktop | grep -f spisok.txt

/home/xx/.local/share/applications/atom_atom.desktop


echo /home/xx/.local/share/applications/atom_atom2.desktop | grep -f spisok.txt

/home/xx/.local/share/applications/atom_atom2.desktop

В принципе эта задача решена в большом скрипте. Там sed сопоставляет список tofix2.csv со всеми возможными .desktop (в указанных папках) и заменяет строку Icon= только если она соответствует (вплоть до буквы) образцу в tofix2.csv. Если там есть хоть один лишний знак, или имя у .desktop другое (правило $launcher, что нам и надо), sed вообще не трогает такие .desktop

Посмотрите на первый большой скрипт, может там есть решение?
« Последнее редактирование: 24 Октябрь 2017, 17:16:14 от ase66 »

 

Страница сгенерирована за 0.265 секунд. Запросов: 23.