Vraag Verander het mappictogram van meerdere mappen (films) [dupliceren]


Deze vraag heeft hier al een antwoord:

Hoe kan ik de pictogrammen van veel mappen wijzigen?

Hoe stel ik de eerste foto van elke map in als mappictogram?

Ik ben hier geweest, maar het werkt niet voor mij. Omdat mijn films zich niet in de home-partitie bevinden, bevinden ze zich in een andere ext4-partitie en wanneer ik probeer de locatie van die partitie in die opdracht te plaatsen, werkt deze simpelweg niet omdat deze automatisch wordt geplaatst / Home / Sumeet voor de locatie die ik typ.

Scripts in de 2e post werken niet! Misschien doe ik iets verkeerd.

[EDIT 2 GEDETAILLEERD]

{ while read -r d ; do [ -d "$d" ] && [ -e "$d/folder.png" ] || continue ; gvfs-set-attribute -t string "$d" metadata::custom-icon "file://$d/folder.png" ; done ; } < <(find ~/mnt/c2104e2a-cc8e-4b7b-9bba-a05d316472b4/I -mindepth 1 -maxdepth 1 -type d)

Ik heb dit commando eerst vanaf het eerste bericht uitgevoerd, waardoor ik een uitputting kreeg

find: ‘/home/sumeet/mnt/c2104e2a-cc8e-4b7b-9bba-a05d316472b4/I’: No such file or directory

Daarna heb ik een aantal van de bestanden verplaatst naar home / video's / films zoals gesuggereerd in de originele post en voer deze opdracht uit

{ while read -r d ; do [ -d "$d" ] && [ -e "$d/folder.png" ] || continue ; gvfs-set-attribute -t string "$d" metadata::custom-icon "file://$d/folder.png" ; done ; } < <(find ~/Videos/Films -mindepth 1 -maxdepth 1 -type d)

Dat werkte prima, maar ik kan mijn hele filmcollectie niet verplaatsen naar de thuismap.

Toen probeerde ik de oplossing in de 2de genoemde post en liep

python3 /home/sumeet/change_icon.py </mnt/c2104e2a-cc8e-4b7b-9bba-a05d316472b4/I>

En kreeg deze uitvoer

bash: syntax error near unexpected token `newline'

Toen dacht ik, ik deed iets verkeerd en probeerde dit

python3 /home/sumeet/change_icon.py /mnt/c2104e2a-cc8e-4b7b-9bba-a05d316472b4/I

Geen output, maar het werkte ook niet.

Toen probeerde ik het tweede script 3 of 4 keer. Klik met de rechtermuisknop optie verscheen, maar het werkte niet, en ik heb alles gedaan, beide posten gevraagd. Ik logde uit, logde weer in, ik probeerde opnieuw op te starten, -q nautilus

Lijkt niet te werken.


1
2018-03-14 13:35


oorsprong


Post het eigenlijke commando dat je hebt uitgevoerd. Hoe weten we wat je fout hebt gedaan als je ons niet laat zien? - muru
In het tweede script is de getargete directory een argument. Ik zie dat niet in de opdracht die je hebt uitgevoerd. Tenzij u de rechtermuisknop-optie hebt gebruikt, in welk geval u het niet als een afzonderlijk script moet uitvoeren, maar alleen van nautilus. - Jacob Vlijm
Jacob jlijm, kun je wat uitleggen, want ik ben hier helemaal nieuw voor! - Sumeet Deshmukh
Is hun enige andere manier die ik vanaf het begin kan proberen? - Sumeet Deshmukh
klik met de rechtermuisknop werkte! Linux is het beste - Sumeet Deshmukh


antwoorden:


Dit script is geschreven door Jacob Vlijm en werd oorspronkelijk gepost hier.

#!/usr/bin/env python3
import subprocess
import os

# --- set the list of valid extensions below (lowercase)
# --- use quotes, *don't* include the dot!
ext = ["jpg", "jpeg", "png", "gif", "icns", "ico"]
# ---

# retrieve the path of the targeted folder
current = os.getenv("NAUTILUS_SCRIPT_CURRENT_URI").replace("file://", "").replace("%20", " ")
dr = os.path.realpath(current)

for root, dirs, files in os.walk(dr):
    for directory in dirs:
        folder = os.path.join(root, directory)
        try:
            first = min(p for p in os.listdir(folder) 
                        if p.split(".")[-1].lower() in ext)
        except ValueError:
            pass
        else:
              subprocess.Popen([
                  "gvfs-set-attribute", "-t", "string",
                  os.path.abspath(folder), "metadata::custom-icon",
                  "file://"+os.path.abspath(os.path.join(folder, first))
                  ])

Gebruiken

  1. Maak, als het nog niet bestaat, de map

    ~/.local/share/nautilus/scripts
    
  2. Kopieer het script naar een leeg bestand, sla het op ~/.local/share/nautilus/scripts als set_foldericons (geen extensie!), klik met de rechtermuisknop en ga naar bestandseigenschappen en maak het uitvoerbaar.

  3. Log uit en weer in, het werkt.

Als u alle mappictogrammen wilt verbergen (zodat u niet per ongeluk veronderstelt dat ze mappen zijn), voegt u een toe . aan het begin van bestandsnamen, bijvoorbeeld folder.png wordt .folder.png 

all set, with one script

Origineel werk


6
2018-04-04 10:35



Aangezien u Python gebruikt, gebruikt u urllib.parse.unquote en urllib.parse.urlparse om bestandspaden correct uit de URI te extraheren die nautilus biedt. - muru
@muru Ik ben er nieuw bij, kun je het antwoord bewerken om de veranderingen die je suggereert te weerspiegelen? - Sumeet Deshmukh