Ce code AppleScript fonctionne pour moi avec la dernière version de MacOS Mojave.
Ce code parcourt en boucle tous les éléments de la poubelle et les replace à leur emplacement d'origine.
Si l'un des dossiers sources d'origine des fichiers de la Corbeille n'existe plus, la fonction repeat until trashCount is 0
permet de sortir de la boucle. Tous les fichiers restants dans la Corbeille seront uniquement des fichiers qui n'ont pas pu être remis en place pour cette raison.
UPDATE
Comme il est possible de sélectionner un élément du bureau pendant la boucle de répétition du processus de remise à la place des fichiers de la corbeille, l'élément du bureau sélectionné peut être pris dans le processus et être déplacé vers la corbeille. Pour éviter ce scénario, j'ai ajouté un code qui verrouillera les éléments du Bureau actuellement déverrouillés et les déverrouillera également à la fin du script.
Parce que tous les éléments du bureau sont maintenant verrouillés... Pendant le processus de remise à disposition des fichiers de la corbeille, si pour une raison quelconque vous sélectionnez accidentellement un fichier ou un dossier sur votre bureau et que le code tente de traiter cet élément du bureau sélectionné... Il générera une fenêtre de dialogue mentionnant que cet élément est verrouillé et vous demandera si vous voulez continuer à l'envoyer à la corbeille. Le bloc System Events tell vers la fin du script traitera toutes ces boîtes de dialogue qui ont pu être générées.
property desktopFolder : path to desktop
property unlockedFiles : missing value
tell application "Finder" to set trashCount to count of every item of trash
tell application "Finder"
set unlockedFilesRef to a reference to ¬
(items of desktopFolder whose locked is false)
set unlockedFiles to contents of unlockedFilesRef
try
set locked of unlockedFilesRef to true
end try
end tell
repeat until trashCount is 0
tell application "Finder" to set orphanCount to ¬
count of every item of trash
putFilesBack()
tell application "Finder" to set trashCount to ¬
count of every item of trash
if orphanCount is equal to trashCount then exit repeat
end repeat
delay 0.3
try
tell application "Finder" to close window "Trash"
end try
delay 0.3
tell application "System Events"
repeat until not (exists of button "Stop" of scroll area 1 ¬
of window 1 of application process "Finder")
if exists of button "Stop" of scroll area 1 ¬
of window 1 of application process "Finder" then
click button "Stop" of scroll area 1 of window 1 ¬
of application process "Finder"
end if
end repeat
end tell
tell application "Finder"
close every Finder window
delay 0.5
repeat with i in unlockedFiles
set locked of i to false
end repeat
end tell
on putFilesBack()
global trashFiles, trashCount, thisItem
tell application "Finder"
set trashFiles to every item of trash
set frontmost to true
repeat while not frontmost
delay 0.1
end repeat
my closeFinderWindows()
end tell
delay 0.1
tell application "System Events"
tell application process "Finder"
repeat with i from 1 to count of trashFiles
set thisItem to item i of trashFiles
delay 0.1
set frontmost to true
select thisItem
delay 0.1
try
key code 51 using {command down}
end try
delay 0.1
my closeFinderWindows()
delay 0.1
end repeat
end tell
end tell
tell application "Finder" to set trashCount to count of every item of trash
end putFilesBack
on closeFinderWindows()
tell application "Finder"
set finderWindowRef to (a reference to ¬
(every Finder window whose name is not "Trash"))
set finderWindowRef to contents of finderWindowRef
close (items of finderWindowRef)
end tell
end closeFinderWindows