ごみ箱のすべてを自動で「戻す」方法はありますか?


16

妻はFinderで「すべてのドキュメント」フォルダを見て、すべてをゴミ箱に移動することにしました。

現在、ごみ箱には9,000を超えるファイルがあり、ワンクリックですべてを元に戻す方法を見つけることができませんでした。

何らかの理由で、一度に1つのファイルのみを「戻す」ことができます。

これを自動化する方法はありますか?


1
彼女がフォルダをゴミ箱にドラッグした場合、ドラッグして元に戻しますか?
-henryaaron

回答:


9

複数アイテムの選択で[Put Back]が無効になっている場合、選択された(少なくとも)1つのアイテムの元の場所情報がゴミ箱ディレクトリの.DS_Storeファイルに保存されていないことを意味します。

それはあまり理想的だけど、あなたは「元に戻す」ことをグループを探しているファイルのマルチ選択サブセットてみ大挙し、残りのファイルの手動提出に頼る前に。


1
ファイルをまとめて「戻す」ことはできません。どちらかのファイルを選択でき、元に戻すオプションがありますが、両方を選択すると「元に戻す」は使用できません。したがって、まとめて「戻す」ことはできないと思います。多分...しかしAppleScriptを持つ
スティーブ・モーザー

6
この答えは間違っています。私は個々のファイルを「Put Back」にすることができますが、複数のファイルを選択した場合、選択できない場合、それはあなたの答えと矛盾します。
トムスワーリー14年

答えは確かに間違っています。ファイルAとファイルBをゴミ箱に入れています。それらを個別に選択すると、右クリックするとプットバックオプションが表示され、両方を選択して右クリックすると、プットバックオプションがなくなります。
レンチ

5

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

@ThierryKoblentzによるものは約50倍高速だったのに、何らかの理由でこれは私にとっては本当に遅くなりました。理由を探りませんでした。
ロリー

3

「ゴミ箱にあるすべてのアイテムを元に戻す」という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

1
これはmacOS Sierraで機能しました。参考までに、キーコード126はアップで、キーコード51はバックスペースです。3行のキーダウン...キーアップ...を1つに変更できますkey code 51 using key command down。(これは別の答えから構成されているファイルがデスクトップに復元し、このスクリプトをめちゃくちゃ私のシステムのパスワードを、望んでいた私はそれらをキャンセルして、手動でいくつかのそれらを回復した。。。
エリック胡

MacOS Mojaveを使用している私にとって、このソリューションは悪夢でした。ごみ箱から戻されたすべてのアイテムは、そのアイテムのソースフォルダーに新しいFinderウィンドウを開きました。その後、コードは現在のFinderウィンドウ(一部はフォルダーアクションが添付されたフォルダー)でアイテムの選択を開始し、トリガーされました。
wch1zpink

3

この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

OPは〜7.5年前なので、OPの問題には適用されませんが、macOSのリリースを処理する自動化されたスクリプトを更新して、プットバックファイルを表示する新しいウィンドウを開くと便利です。おそらく、使用上の注意として、ユーザーにこれを使用するには、UIスクリプトの性質上、終了するまでコンピューターに触れてはならないことを通知する必要があります。必ずしもスクリプトの実行によって提示されるメッセージである必要はありませんが、答えのメモとしてである必要はありません。
user3439894

ところで、私は+1を持っていますが、それを引き起こす状況を処理するためにコーディングできるため、繰り返しループのバグは受け入れられません!
user3439894

@ user3439894コードを更新しました... +1はどこにありますか?笑
wch1zpink

1
それがいかに簡単かを見てください!:) +1
user3439894

1

すべてのファイルをハイライトするか、少なくともインクリメンタルバッチでそれを実行し、コピーしてから再貼り付けできるはずです。私はそれを試しただけで、ごみ箱をダブルクリックして復元したいファイルを右クリックすると、ファイルごとにのみ機能する「プットバック」オプションがあり、強調表示してCc(コマンドc)を押してコピーする次に、Cv(コマンドv)で貼り付けます。


1

これは私のために働いた:

  • Finderで新しいフォルダーを作成し、「回復したファイル」と呼びます
  • ゴミ箱フォルダを開き、ファイルのグループを選択します
  • ファイルをコピーして、「回復したファイル」フォルダーに貼り付けます。

大きなフォルダーまたは多数の個別のファイルを戻す必要がある場合は、この手法を使用してください。1つまたは2つのファイルのみが必要な場合は、「プットバック」機能を使用してください。


1
間違っています-これもファイルを実際に「プットバック」せず、問題を解決しません。単にすべてを取り込んで1つの大きな山に投げ入れます。
トムスワーリー14年

1

Snow Leopardより前のOS Xには、ファイルが削除された元の場所にファイルを復元する機能がネイティブにありません(ごみ箱のコンテキストメニューの[復元]オプションを使用してWindows環境でネイティブに実行できます)。私はあなたの妻が一時間に約10,000個以上のファイルを削除していたのと同じことを誤ってしました。

すべてのオプションを検討した後、Time Machineを使用してシステムの復元を実行しました。これは、ファイルを適切な場所に移動するための最も便利な方法でした。


2
ここで他の回答から簡単に推測できるように、ゴミ箱からファイル/フォルダを戻すことができます。ゴミ箱を開き、ファイルを右クリックして「戻る」を選択します。
nohillside

1

すべてのファイルをゴミ箱からFinderの[すべてのマイファイル]タブにドラッグします。たくさんのファイルがある場合は時間がかかります。10000以上のファイルでテストしました。Finderはすべてのファイルを元の場所に復元します。


2
これはmacOS Sierraでは何もしません
Cyril Duchon-Doris

0

@thierryがすでにGiacomo Balliから提供した近い解決策に基づいて、問題がまだ残っているので、私たちはあなたの何人かを助けるためにこの解決策を作成しました。あなたがするとMacOSの中のファイルを削除し、元の場所がされて保存された.DsStore復元する場合に備えて隠しファイル。macOSの最近のバージョンは、ごみ箱にあるものを元の場所に戻すことができます。ご存じのように、Dockのごみ箱アイコンをクリックすると、ごみ箱にあるアイテムが表示されます。任意のファイルを右クリックまたはControlキーを押しながらクリック(またはCommandキーを押しながら複数のアイテムをクリックして選択し、Ctrlキーを押しながらクリック)すると、[プットバック]オプションが表示されます。唯一の問題は、一度に1つのアイテムに対してのみできることです。

解決

  1. リポジトリをローカルマシンに複製することから始めて、ソリューションの使用を開始できるようにします。

    git clone git@github.com:opprDev / trash-back.git

    cd trash-back

  2. osascriptコマンドを使用して、そのコンピューターでAppleScriptを実行します。

    osascript scripts / trash-back.scpt

結論

AppleScriptを実行すると、コマンドラインからリモートで実行できる操作が大幅に増加し、他の方法では困難な多くのクールなトリックが可能になります。コマンドラインでスクリプト全体を実行できますが、この実行方法は、リモートコンピューターにログインして(sshを使用)、コマンドを介してそのコンピューターでAppleScriptを実行することだけですosascript。このosascriptコマンドは、-l修飾子を使用して、他のOpen Scripting Architecture言語を実行することもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.