Proste sortowanie pobranych plików (aktualizacja!)

Proste rozwiązanie problemu bałaganu w pobranych plikach (~/Downloads) bez używania jakichkolwiek dodatkowych rozwiązań ponad to, co jest już w systemie – wspomagając się jedynie Automatorem i PHP.

Krok pierwszy – krótki skrypt PHP porządkujący pliki według dat pobrania:
(aktualizacja: 29 listopada 2014)

<?php
$args = explode("\n", trim(file_get_contents('php://stdin')));
foreach ($args as $i => $name)
{
	$bname = basename($name);
	if ((is_dir($name) && (preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/', $bname) || preg_match('/^_.+?$/', $bname))) ||
		preg_match('/^\..+?$/', $bname) ||
		preg_match('/^.+?\.(part|download)$/', $bname))
		continue;
	if (filectime($name) > 0)
	{
		$date = date('Y-m-d', filectime($name));
		if (!file_exists(dirname($name) . '/' . $date))
			mkdir(dirname($name) . '/' . $date, 0777, true);
		rename($name, dirname($name) . '/' . $date . '/' . $bname);
	}
}

Krok drugi – utworzenie „Czynności katalogu” w Automatorze i podpięcie pod nią wykonania powyższego skryptu.

automator-01

Utworzenie nowej „czynności katalogu”

automator-02
Konfiguracja czynności

Ważne, aby konfiguracja czynności wyglądała tak jak na obrazku powyżej. W miejsce /sciezka/do/skryptu.php należy oczywiście podstawić odpowiednią lokalizację swojego pliku PHP ze skryptem. Po ścieżce nie musi być $@ (mimo tego, że jest na zrzucie ekranu) a dane wejściowe powinny być skonfigurowane jako „do stdin”.

Co istotne, mechanizm ten działa z dowolnym oprogramowaniem które umieszcza pobrane pliki w wybranym w Automatorze katalogu.

Join the Conversation

2 Comments

  1. A gdyby ktoś chciał posortować już utworzone pliki (ja rzadko kasuję z tego katalogu) to poniżej kawałek kodu oparty na w.w. skrypcie:

    <?php
    $username = 'NAZWA UŻYTKOWNIKA';
    $path = sprintf('/Users/%s/Downloads/', $username);
    
    $downloadDir = opendir($path);
    while ($file = readdir($downloadDir))
    {
    	if ($file == '.' || $file == '..')
    		continue;
    
    	$name = $path . $file;
    	$bname = basename($name);
    
    	if ((is_dir($name) && (preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/', $bname) ||
    		preg_match('/^_.+?$/', $bname))) || preg_match('/^\..+?$/', $bname) ||
    		preg_match('/^.+?\.(part|download)$/', $bname))
         	   continue;
       	if (filectime($name) > 0)
       	{
       		$date = date('Y-m-d', filemtime($name));
       		if (!file_exists(dirname($name) . '/' . $date))
    		{
       			mkdir(dirname($name) . '/' . $date, 0777, true);
    		}
    
           		rename($name, dirname($name) . '/' . $date . '/' . $bname);
       	}
    }

    ——————-

    Dodatkowo drugi skrypt nadpisujący daty modyfikacji istniejących katalogów, żeby się ładnie sortowały:

    <?php
    $username = 'NAZWA UŻYTKOWNIKA';
    $path = sprintf('/Users/%s/Downloads/', $username);
    
    $downloadPath = opendir($path);
    while ($file = readdir($downloadPath))
    {
    	if ($file == '.' || $file == '..')
    		continue;
    	$name = $path . $file;
    	touch($name, strtotime($file));
    }
    
Dodaj komentarz

Dodaj komentarz