回答:
複数アイテムの選択で[Put Back]が無効になっている場合、選択された(少なくとも)1つのアイテムの元の場所情報がゴミ箱ディレクトリの.DS_Storeファイルに保存されていないことを意味します。
それはあまり理想的だけど、あなたは「元に戻す」ことをグループを探しているファイルのマルチ選択サブセットてみ大挙し、残りのファイルの手動提出に頼る前に。
AppleScript Editorで次のようなスクリプトを実行してみてください。
repeat
tell application "Finder"
close windows
if items of trash is {} then return
open trash
activate
end tell
tell application "System Events"
key code 125 -- down arrow
key code 51 using command down -- command-delete
end tell
end repeat
Finderがアイテムを戻すときにパスワードダイアログを表示する場合、tell application "System Events"
ブロックの最後に次のようなものを追加してみてください。
delay 1
if exists window 1 of process "SecurityAgent" then
tell window 1 of process "SecurityAgent"
set value of text field 2 of scroll area 1 of group 1 to "pa55word"
click button 2 of group 2
end tell
end if
delay 1
「ゴミ箱にあるすべてのアイテムを元に戻す」というAppleScriptが機能しました。
「AppleScript Editor」を開き、以下の行をコピーして貼り付け、必要な回数だけスクリプトを実行します。
tell application "System Events"
tell process "Finder"
repeat 100 times
tell application "Finder" to open trash
tell application "Finder" to activate
key code 126
key down command
key code 51
key up command
delay 0.2 -- adjust delay as needed
end repeat
end tell
end tell
tell application "Finder" to close every window
key code 51 using key command down
。(これは別の答えから構成されているファイルがデスクトップに復元し、このスクリプトをめちゃくちゃ私のシステムのパスワードを、望んでいた私はそれらをキャンセルして、手動でいくつかのそれらを回復した。。。
このAppleScriptコードは、macOS Mojaveの最新バージョンを使用して機能します。
このコードは、ゴミ箱内のすべてのアイテムをループし、各アイテムを元の場所に戻します。
ゴミ箱内のファイルの元のソースフォルダーが存在しない場合、repeat until trashCount is 0
コマンドはループを終了します。ゴミ箱に残っているファイルは、この理由で元に戻せなかったファイルのみです。
更新
ごみ箱からファイルを戻すプロセスの繰り返しループ中にデスクトップ上のアイテムを選択することが可能であるため、選択したデスクトップアイテムがプロセスに追いついてごみ箱に移動する可能性があります。このシナリオを回避するために、現在ロック解除されているデスクトップアイテムをロックし、スクリプトの最後にロック解除するコードを追加しました。
すべてのデスクトップアイテムがロックされているため...ゴミ箱からファイルを戻すプロセス中に、何らかの理由でデスクトップ上のファイルまたはフォルダーを誤って選択し、コードがその選択されたデスクトップアイテムを処理しようとすると...そのアイテムがロックされていることを示すダイアログウィンドウを生成し、それを引き続きゴミ箱に送信するかどうかを尋ねます。スクリプトの最後の方にあるシステムイベントのtellブロックは、生成されたダイアログボックスを処理します。
property desktopFolder : path to desktop
property unlockedFiles : missing value
tell application "Finder"
set trashCount to count of every item of trash
set unlockedFiles to (items of desktopFolder whose locked is false)
repeat with i in unlockedFiles
set locked of i to true
end repeat
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 1
tell application "System Events"
repeat until not (exists of button "Stop" of scroll area 1 of window 2 of application process "Finder")
if exists of button "Stop" of scroll area 1 of window 2 of application process "Finder" then
click button "Stop" of scroll area 1 of window 2 of application process "Finder"
end if
end repeat
end tell
tell application "Finder"
close every Finder window
delay 1
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
これは私のために働いた:
大きなフォルダーまたは多数の個別のファイルを戻す必要がある場合は、この手法を使用してください。1つまたは2つのファイルのみが必要な場合は、「プットバック」機能を使用してください。
Snow Leopardより前のOS Xには、ファイルが削除された元の場所にファイルを復元する機能がネイティブにありません(ごみ箱のコンテキストメニューの[復元]オプションを使用してWindows環境でネイティブに実行できます)。私はあなたの妻が一時間に約10,000個以上のファイルを削除していたのと同じことを誤ってしました。
すべてのオプションを検討した後、Time Machineを使用してシステムの復元を実行しました。これは、ファイルを適切な場所に移動するための最も便利な方法でした。
すべてのファイルをゴミ箱からFinderの[すべてのマイファイル]タブにドラッグします。たくさんのファイルがある場合は時間がかかります。10000以上のファイルでテストしました。Finderはすべてのファイルを元の場所に復元します。
@thierryがすでにGiacomo Balliから提供した近い解決策に基づいて、問題がまだ残っているので、私たちはあなたの何人かを助けるためにこの解決策を作成しました。あなたがするとMacOSの中のファイルを削除し、元の場所がされて保存されたに.DsStore
復元する場合に備えて隠しファイル。macOSの最近のバージョンは、ごみ箱にあるものを元の場所に戻すことができます。ご存じのように、Dockのごみ箱アイコンをクリックすると、ごみ箱にあるアイテムが表示されます。任意のファイルを右クリックまたはControlキーを押しながらクリック(またはCommandキーを押しながら複数のアイテムをクリックして選択し、Ctrlキーを押しながらクリック)すると、[プットバック]オプションが表示されます。唯一の問題は、一度に1つのアイテムに対してのみできることです。
解決
リポジトリをローカルマシンに複製することから始めて、ソリューションの使用を開始できるようにします。
git clone git@github.com:opprDev / trash-back.git
cd trash-back
osascriptコマンドを使用して、そのコンピューターでAppleScriptを実行します。
osascript scripts / trash-back.scpt
結論
AppleScriptを実行すると、コマンドラインからリモートで実行できる操作が大幅に増加し、他の方法では困難な多くのクールなトリックが可能になります。コマンドラインでスクリプト全体を実行できますが、この実行方法は、リモートコンピューターにログインして(sshを使用)、コマンドを介してそのコンピューターでAppleScriptを実行することだけですosascript
。このosascript
コマンドは、-l修飾子を使用して、他のOpen Scripting Architecture言語を実行することもできます。