La lista laterale del Finder non si aggiornerà dopo la modifica

2

Sto tentando di aggiornare la sidebarlist senza riavviare il computer (in questo caso la sidebar viene aggiornata bene dopo aver modificato i valori).

Le mie operazioni sono:

Converti in XML

plutil -convert xml1 ~/Library/Preferences/com.apple.sidebarlists.plist

Modifica delle cose che cambiano (aggiunta, rimozione, ecc.)

(using text editor)

Converti nuovamente in binario

plutil -convert binary1 ~/Library/Preferences/com.apple.sidebarlists.plist

Cercando di riavviare Finder in molti modi

osascript -e 'quit app "Finder"'
sleep 1
osascript -e 'tell app "Finder" to launch'

killall Finder
killall Finder SystemUIServer
killall -HUP Finder
killall cfprefsd

ma la sidebarlist non verrà mai aggiornata ...

Come ho detto se riavvio il computer, poi vedo le modifiche.

Qualche idea? Grazie!

P.D. A proposito, sono in Yosemite ... forse ha qualcosa da fare

    
posta FlamingMoe 10.12.2014 - 22:23
fonte

3 risposte

4

Non manipolare MAI direttamente alcun file in ~ / Library / Preferences. Tutte le preferenze sono gestite da un processo in background chiamato cfprefsd (abbreviazione di Core Foundation PREFerences Daemon), che recupera e memorizza nella RAM i file in ~ / Library / Preferences. In passato, spesso si poteva andare avanti con la manipolazione dei file di preferenza dietro la cfprefsd , per così dire, ma cfprefsd recentemente si è rivelato molto aggressivo su quanto memorizza nella cache .

Invece di modificare uno di questi file, chiedi a cfprefsd una copia, modifica la copia, quindi invia il contenuto della copia a cfprefsd . La tua interfaccia per cfprefsd è il comando della shell defaults .

Ad esempio, per modificare le preferenze per il dominio com.apple.sidebarlists :

defaults read com.apple.sidebarlists > ~/Desktop/sidebarlists.txt
... edit sidebarlists.txt to your heart's content
defaults write com.apple.sidebarlist "$(cat ~/Desktop/sidebarlist.txt)"

Dovrai rendere il Finder consapevole delle modifiche, quindi esegui

osascript -e 'tell application "Finder" to quit'
sleep 0.2 # not always necessary
osascript -e 'tell application "Finder" to activate'

Ricorda di giocare bene con altri programmi. Uccidere non è bello, quindi non uccidere nulla (specialmente non cfprefsd ) che non devi assolutamente uccidere. Non fare jerk con il negozio persistente di un altro programma mentre è in esecuzione. In particolare, dato che cfprefsd è sempre in esecuzione, MAI modificare direttamente i contenuti di ~ / Library / Preferences /*.

Se è necessario eliminare un file delle preferenze, il modo corretto è con:

defaults delete its.domain.name

Lascia che cfprefsd si preoccupi di eliminare il file (o, come è solito fare oggigiorno, riscrivere un file essenzialmente vuoto su di esso).

Il nome file ~ / Desktop / sidbarlist.txt è, ovviamente, solo un esempio. Se preferisci, usa l'estensione .plist invece di .txt. Il file sarà in formato plist testo NextStep.

Se preferisci un altro formato di elenco di proprietà, usa pllist -convert ... . Oppure lascia che il comando defaults lo scriva come un file .plist in un formato a sua scelta con

defaults write ~/Desktop/sidebarlists "$(defaults read com.apple.sidebarlists)"
... edit the file ...
defaults write com.apple.sidebarlists "$(defaults read ~/Desktop/sidebarlists)"

Ma l'importante è che tu mantenga la tua copia, quella che modifichi o altrimenti manipoli, al di fuori di ~ / Library / Preferences. Lascia che i valori predefiniti si preoccupino di comunicare con cfprefsd e lascia che cfprefsd si preoccupi di manipolare ~ / Library / Preferences.

    
risposta data 11.12.2014 - 05:11
fonte
1

Grazie per aver postato queste informazioni - è stato molto utile per aiutarmi a trovare una soluzione per il problema della sidebar in Yosemite.

I nostri utenti prendono sul serio le loro cartelle della sidebar e quindi abbiamo dovuto trovare un modo per eseguire il backup e il ripristino dei contenuti di sidebarlists.plist, dal momento che Yosemite è così sfacciato.

Inizialmente ho provato questo metodo:

Backup:

mkdir -p /Users/Shared/SidebarBackup/

defaults read com.apple.sidebarlists.plist > /Users/Shared/SidebarBackup/SBLbackup.plist

Ripristina:

osascript -e 'tell application "Finder" to quit'

sleep 0.2

defaults delete com.applesidebarlists.plist

sleep 0.2

defaults write com.apple.sidebarlist "$(cat /Users/Shared/SidebarBackup/SBLbackup.plist)"

osascript -e 'tell application "Finder" to activate'

E scopri che dopo aver riavviato il Mac gli oggetti sono stati ripristinati ma non appena hai lanciato una finestra del Finder, sarebbe esploso e avresti dovuto uccidere il finder, eliminare il plist e riavviare prima che Finder fosse di nuovo funzionante.

Quindi, dopo tanto gioco, questo è il risultato finale e funziona come un incantesimo:

Backup:

mkdir -p ~/Library/Preferences/Backups

defaults export com.apple.sidebarlists ~/Library/Preferences/Backups/Sidebarlists.plist

Ripristina:

osascript -e 'tell application "Finder" to quit'

sleep 0.2

defaults delete com.apple.sidebarlists.plist

sleep 0.2

defaults import com.apple.sidebarlists.plist ~/Library/Preferences/Backups/Sidebarlists.plist

sleep 0.2

osascript -e 'tell application "Finder" to activate'

Pianifica di creare un elemento self-service di Casper (Il backup self-service funziona correttamente ma lo script di ripristino non funziona correttamente. Se non è una cosa, è un'altra ....)

    
risposta data 20.02.2015 - 13:41
fonte
0

Non penso che Finder aggiorni l'aggiornamento fino a dopo il riavvio. Pertanto, se stai cercando di ripristinare le scorciatoie della sidebar o di eliminarle completamente, non vedrai le modifiche fino al riavvio.

    
risposta data 02.06.2015 - 16:42
fonte

Leggi altre domande sui tag