2017-09-26 135 views
2

我想在automator中創建一個任務,將〜/下載的文件移動到垃圾桶中,如果它們超過30天。刪除超過30天的下載?

我希望這個每天運行。

雖然它不工作,Finder只是掛起並停止響應,我必須強制退出活動監視器。

on run {input, parameters} 

    tell application "Finder" 
     set deleteFileList to (files of entire contents of folder alias "Macintosh HD:Users:George:Downloads" whose modification date is less than ((get current date)) - 30 * days) 
     try 
      repeat with deleteFile in deleteFileList 
       delete deleteFile 
      end repeat 
     end try 
    end tell 

    return input 
end run 

回答

1

我會採取不同的方式,並使用一組行動提供的Automator無需使用AppleScript的

以下工作流程將完成您正在尋找的工作。

的Automator,創建一個新的工作流加入以下操作:

  • 獲得指定的Finder項
    • 添加下載文件夾吧。
  • 獲取文件夾內容
    • []重複每個子文件夾中
  • 過濾器Finder項目
    • 查找文件,其中:
      • 以下的所有都爲真
        • 最後修改日期是不是在過去30天
  • 將Finder項廢紙簍

保存工作流程作爲應用,如:清理下載。應用程序

這應該運行得更快然後AppleScript版本,它在我的測試。


蘋果首選方法來安排這樣的東西,因爲這是使用launchdlaunchctl

運行清理下載,每天,我會做到以下幾點:

  1. 添加清理下載到:系統預置>安全&隱私>隱私>無障礙
  2. 創建一個用戶LaunchAgent在:~/Library/LaunchAgents/

    • 舉例:com.me.cleanup.downloads.plist爲包含XML文件:

      <?xml version="1.0" encoding="UTF-8"?> 
      <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
      <plist version="1.0"> 
      <dict> 
          <key>Label</key> 
          <string>com.me.cleanup.downloads</string> 
          <key>ProgramArguments</key> 
          <array> 
           <string>/Applications/Cleanup Downloads.app/Contents/MacOS/Application Stub</string> 
          </array> 
          <key>RunAtLoad</key> 
          <false/> 
          <key>StartCalendarInterval</key> 
          <array> 
           <dict> 
            <key>Hour</key> 
            <integer>10</integer> 
            <key>Minute</key> 
            <integer>00</integer> 
           </dict> 
          </array> 
      </dict> 
      </plist> 
      
    • 設置HoursMinutes值,StartCalendarInterval下,以適合您的需要。該示例設置爲:10:00 AM

  3. 終端運行以下命令負載的LaunchAgent:

    launchctl load ~/Library/LaunchAgents/com.me.cleanup.downloads.plist 
    

注:見終端中的launchdlaunchctl的手冊頁,例如man launchctl

或者使用第三方工具,它有一個GUI,例如:Lingon X

注:我不跟Lingon X的開發者相關的,但是我是一個滿意的客戶。


的AppleScript代碼一些評論:

一個repeat聲明是沒有必要的,只要使用:

move deleteFileList to trash 

current date命令技術上執行下current application,而不是Finder作爲查找器不理解current date命令。因此,設置爲 a 變量並在命令中使用變量

set thisDate to get (current date) - 30 * days 

... whose modification date is less than thisDate 

現在,我不建議你居然在工作流程我建議使用AppleScript的,我只是指出了一些東西,在代碼我再跟。

+0

@theonlygusti,我已更新我的答案,以包含信息來安排使用工作流應用程序。 – user3439894

+0

我假設「[]對每個重複...」意思是爲每個找到的子文件夾重複一遍?所以,[這是它應該是什麼樣子?](http://i.cubeupload.com/hrJBcx.png) – theonlygusti

+0

@theonlygusti,在** Automator **中,創建一個新的**應用程序** _workflow_,添加以下_actions_:... :)是的,將其另存爲應用程序。 – user3439894

0

如果Finder掛起,這可能是因爲「整個內容」中有太多文件。這可能是因爲一些下載的項目是由具有子文件夾/子文件夾的文件夾組成的......然後是太多的文件。

相反,我建議你只看看下載文件夾的第一級:項目頂層:

Set DeleteFileList to every items of folder "Macintosh HD:Users:George:Downloads" whose modification date is less than ((get current date)) - 30 * days) 

DeleteFileList的內容將製成的文件和文件夾,但我猜你想刪除完整的文件夾,而不僅僅是其中的文件。

+1

'文件夾別名別名'可能工作,但不是很好的語法。無論是「文件夾」還是(一個)「別名」。並有*快捷鍵*'...(下載文件夾的路徑)的每一項......' – vadian

+0

感謝Vadian。 「別名」是我的錯誤。我只是刪除它。 – pbell