Gå till innehåll
Just nu i M3-nätverket

Sortera Downloads med månads-mappar?


Peter Westerlund

Rekommendera Poster

Peter Westerlund

Kan man via något hyffsat lätt hack fixa så det skapas månadsmappar i mappen Downloads. Antingen mappnamn "2014-05" eller /2014/Maj och att allt man laddar ner hamnar i aktuell mapp för vilken månad det är?

 

Skulle ju underlätta något enormt. Är det ingen som tänkt på detta?! :P

Länk till kommentar
Dela på andra webbplatser

Mattis.se

Du kan högerklicka på mappen i Dock och välja "Sortera efter tilläggsdatum". Underlättar lite i alla fall, även om det inte är svar på din fråga.

Länk till kommentar
Dela på andra webbplatser

du kan göra smarta mappar som sorterar innehållet i download efter tidsperiod....men själva mapparna händer ju inte automagiskt bara sorteringen i dem.

Länk till kommentar
Dela på andra webbplatser

Kan man via något hyffsat lätt hack fixa så det skapas månadsmappar i mappen Downloads. Antingen mappnamn "2014-05" eller /2014/Maj och att allt man laddar ner hamnar i aktuell mapp för vilken månad det är?

 

Skulle ju underlätta något enormt. Är det ingen som tänkt på detta?! :P

Du skulle kunna prova det här, om det kan vara nåt... :)

 

Gör en folder i hemfoldern som heter: ShellScripts och spara det här i en fil som heter (t ex): dl_cleanup.sh

#!/usr/bin/env bash
#
# ~/ShellScripts/dl_cleanup.sh
#
# Spara allt i Downloadsfoldern till mappar med namnet: YYYY-MM
#
# Körs scriptet manuellt fylls det på i aktuell folder
#

# std folder
_dir="$HOME/Downloads";
DIR=$_dir;

# dl_cleanup.sh "/sökväg/till/folder"
[ -d "$1" ] && DIR="$1";

# foldrar som inte kan köras.
# [!] skyddar inte mot allt, men de i första nivån
protected_dirs=("/" "/*" "/*/" "/Users/*" "/Users/*/" "/Users/*/Library" "/Users/*/Library/");
red="\033[0;31m";    # röd
def="\033[0m";

for d in ${protected_dirs[@]}; do
    [ "$1" == $d ] && echo -e " ${red}::${def} Foldern: \"${d}\" är skyddad." && exit;
done;

# Folderformat: YYYY-MM
ARCHIVE=$(date "+%Y-%m");

# Kör ...
if [ -d $DIR ]; then
	cd $DIR;
	# Skapa foldern om den inte finns
	[ -d $ARCHIVE ] || mkdir -p $ARCHIVE;

	for file in *; do
		if [[ -e $(echo "$file" | sed -e '/\([0-9]\{4\}\)\-\([0-9]\{2\}\)$/g') ]]; then
			mv "$file" $ARCHIVE;
		fi
	done;
fi

exit;

Eller här är filen, “zippad”: dl_cleanup.sh.zip

 

 

I Teminalen, kör:

chmod +x ~/ShellScripts/dl_cleanup.sh

...så scriptet blir körbart.

 

För att köra:

~/ShellScripts/dl_cleanup.sh

Döp om det till ett kortare namn om du vill, men ha gärna kvar ".sh" på slutet som visar att det är ett shellscript.

 

I a f, vad det gör är att flytta allt som inte är en folder med “mönstret”: YYYY-MM till en ny med aktuell månads nummer. (eg 2014-05).

 

Körde en test här (på en annan folder) och det ser ut såhär då...

 

post-64246-0-39562800-1430919808_thumb.png

 

 

Sen kan du köra det så ofta du vill. Eller vill du ha det helautomatiserat? kan man göra en s k launchdaemon som kör t ex den sista varje månad, eller nåt sånt.

 

Första raden där det står "Downloads", skall funka även på svenska system, annars byt bara till det namnet mappen heter. :crossfingers:

Länk till kommentar
Dela på andra webbplatser

Mattiasgbg

Bör väl gå att fixa något mappkommando som flyttar nya filer till månadsmappar och vid behov skapar nya månadsmappar.

 

Högerklicka på en mapp och välj Inställningar för mappkommando...

 

Annars är väl Hämtade filer tänkt att vara en tillfällig förvaringsplats, ungefär som som Bert Karlssons flyktingboenden.

 

 

Tillägg: Det bör gå att köra iEricFs skript varje gång något läggs till med hjälp av mappkommandon.

Länk till kommentar
Dela på andra webbplatser

du kan göra smarta mappar som sorterar innehållet i download efter tidsperiod....men själva mapparna händer ju inte automagiskt bara sorteringen i dem.

Kikade också lite på det. Har aldrig använt det. Det såg ut som man bara kunde utgå från: Hem, Skrivbord el Delat. Kanske ändrats nu.
Länk till kommentar
Dela på andra webbplatser

Kikade också lite på det. Har aldrig använt det. Det såg ut som man bara kunde utgå från: Hem, Skrivbord el Delat. Kanske ändrats nu.

om du skapar smarta mappen i downloadmappen så kan du utgå från download mappen (när du skapar mappen i desktop så får du det alternativet)....jag har själv inte provat men det låter inte som det skulle vara omöjligt.

Länk till kommentar
Dela på andra webbplatser

Om man lägger till en (1) rad i skriptet kan man köra det på vilken folder man vill sen.

[ -d "$1" ] && DIR="$1";

Då tar den första “input” efter skriptnamnet, kollar om det är en folder och använder den istället. Ex:

~/ShellScripts/download_archiver.sh "/sökväg/till/annan/folder"

Uppdaterade även zipfilen

Länk till kommentar
Dela på andra webbplatser

Peter Westerlund

Oj har inte sett att jag fått svar här! Får inga mail när någon svarar, märkligt. Har fått det förr.

 

Hur som helst:

 

 

 

Tillägg: Det bör gå att köra iEricFs skript varje gång något läggs till med hjälp av mappkommandon.

 

Om detta gick vore det super. Men "Inställningar för mappkommandon..." verkar inte så lätt, inte för mig i alla fall. Fattar ingenting när jag klickar mig in i dom inställningarna.

 

Men vore ju super om skriptet kunde köras varje gång en fil läggs till i mappen.

Länk till kommentar
Dela på andra webbplatser

Mattiasgbg

Följande mappkommando gör något så dumt som att skapa mappen x på skrivbordet varje gång något läggs i den kopplade mappen.

on adding folder items to this_folder after receiving added_items
	try
		do shell script "mkdir ~/Desktop/x"
	end try
end adding folder items to

Try-raderna innebär ungefär att det inte låser sig eller genererar felmeddelande om koden innanför inte funkar av någon anledning.

Byt ut

mkdir ~/Desktop/x

mot sökvägen till ditt skript.

Spara i Library/Scripts/Folder Action Scripts.

Placera det i din användarmapp eller i den gemensamma Library-mappen efter behag.

Länk till kommentar
Dela på andra webbplatser

Peter Westerlund

iEricF Jag har försökt göra som ditt första inlägg där och prövat köra skript-filen manuellt från Terminalen. Men ingenting händer, får inget felmeddelande heller dock. Men inget händer i Downloads.

 

Edit: Jaha jag glömde att faktiskt köra skriptet. Körde bara chmod. Efter att kört skriptet så skapades EN mapp, 2015-05 där nästan alla filer och mappar hamnade och fick tilläggsdatum idag. Alla mappar fick även ändringsdatum idag men alla filer behåller sina gamla ändringsdatum.

 

Några filer ligger kvar i Downloads-roten, utanför 2015-05-mappen.

 

Edit 2: Ang. filerna utanför så tror jag dom ligger där korrekt, dom har namn-struktur som säkert tolkats som datum med regexen.

Länk till kommentar
Dela på andra webbplatser

Peter Westerlund

Edit 3: Eller jaha, jag kanske missförstod vad den gjorde. Den skickar filen till aktuell månads nummer oavsett vad filen har för tilläggsdatum. Blev lite förvirrad av att det på din bild var flera månader. Så trodde den skapade flera mappar. Men jag får sortera allt som finns manuellt och låtar skriptet fungera på kommande filer. Har lyckats få in det i Automator så det körs varje gång en fil läggs till i Downloads :)

Länk till kommentar
Dela på andra webbplatser

iEricF Jag har försökt göra som ditt första inlägg där och prövat köra skript-filen manuellt från Terminalen. Men ingenting händer, får inget felmeddelande heller dock. Men inget händer i Downloads.

Ok, då får man felsöka lite... :)

Hur såg kommandot ut som du körde? Och du hade kollat/gjort så filen blev körbar?

Rent spontant utan fel och inget händer låter det som att den inte gillar namnet Downloads.

 

Kan du köra:

[ -d $HOME/Downloads ] && echo 'Det funkar'

...och det visar "Det funkar" i Terminalen sen?

 

Prova annars att ändra i raden (rad 8), den med DIR så det står: DIR="$HOME/Hämtade filer" ... eller vad foldern heter i Finder.

 

Du kan också lägga till (ta bort senare) på nere vid rad 17

if [ -d $DIR ]; then
	cd $DIR;

# lägg till en "echo"

if [ -d $DIR ]; then
	echo "Hej från $DIR";
	cd $DIR;

Vilket syns i terminalen då om nu foldern finns. "-d $DIR" är; Om (if) DIR är en folder, gör det här. Annars gör den ingenting.

 

 

Om du vill kolla först hur det funkar (innan du ändrar nåt) kan du testa med det här:

mkdir -p ~/Desktop/test.d;
cd ~/Desktop/test.d;
touch filen{1..5}.txt;
mkdir -p folder{1..3}

# kolla så det ligger på skrivbordet, sen kör
~/ShellScripts/download_archiver.sh ~/Desktop/test.d
Länk till kommentar
Dela på andra webbplatser

Edit 3: Eller jaha, jag kanske missförstod vad den gjorde. Den skickar filen till aktuell månads nummer oavsett vad filen har för tilläggsdatum. Blev lite förvirrad av att det på din bild var flera månader. Så trodde den skapade flera mappar. Men jag får sortera allt som finns manuellt och låtar skriptet fungera på kommande filer. Har lyckats få in det i Automator så det körs varje gång en fil läggs till i Downloads :)

Ah, va bra... :yeahbaby: Missade dina uppdateringar medans jag skrev.

 

Ja, jag hade med fler mappar i mitt exempel för att kolla så den inte flyttade in dem i aktuell månads mapp.

 

Exakt den flyttar in allt i samma mapp hela tiden. Datumet går efter vilken månad det är och inte när filen är gjord, dvs när skriptet körs. Det blir löpande arkiv av det sen: 2015-05, 2015-06, 2015-07 osv... Antog att det var så du ville ha det.

 

Om det är filer som har det möstret innan så stannar de nog kvar där ja... ev man kan pilla in en koll så det bara gäller foldrar med det namnet och inte kör matchning på allt. Men det lär väl inte vara så många filer i sånt fall?

Länk till kommentar
Dela på andra webbplatser

Peter Westerlund

Jag börjar få ordning nu! Så nu vill jag utöka och göra ännu mer ordning. Så vill skapa Smarta Mappar i Downloads som sparar sökningar för olika typer, t ex "Bilder", "Dokument" m.m. Men problemet nu är att även de smarta mapparna flyttas in i 2015-05 när jag lägger till dom. Så vore bra om det gick att fixa if-satsen så den exkluderar ".savedSearch"-filer. Jag sysslar med PHP så kan if-satser där men bash förstår jag mig inte på. Kan du hjälpa mig med hur if-satsen ska bli?

Länk till kommentar
Dela på andra webbplatser

Javisst, kan kika på det under morgondagen...

Du kan prova den här så länge, raden med:

mv "$file" $ARCHIVE;

# byt till...

[[ ! "$file" =~ ".savedSearch" ]] && mv "$file" $ARCHIVE;

Det bode skippa de filerna som har ändelsen “.savedSearch”

- - -

 

Faktiskt är bash och php rätt lika varandra i sitt sätt, men skiljer sig en del i syntax. Är faktisk rätt kul och man kan göra många små smidiga script som gör det man vill/behöver. :yeahbaby: Php går ju att köra som shell/cli skript med om du vill göra ett sånt.

Länk till kommentar
Dela på andra webbplatser

Peter Westerlund
mv "$file" $ARCHIVE;

# byt till...

[[ ! "$file" =~ ".savedSearch" ]] && mv "$file" $ARCHIVE;

Det bode skippa de filerna som har ändelsen “.savedSearch”

 

Det lyckades!

 

Har inte tänkt eller ens försökt köra PHP som shell, men jag förstår att det är kul att göra små skript lokalt på systemet. Jag skulle ha stor glädje av att kunna göra mer sånt. Har vid olika tillfällen försökt lära mig lite mer om operativsystem och till att börja med hur man hanterar det via Terminalen. Men gett upp när det blivit för svårt och tidskrävande. Men det var kul att jag förstod mig på Automator och lyckades koppla ditt skript till det.

 

Vill anse att min ursprungsfråga är löst nu.

 

Om du eller någon annan vet hur man gör så en Smart Mapp bara söker igenom en bestämd nivå i mapp-hierarkin så får man gärna komma med det svaret nu också ;) Har ju skapat en Smart Mapp som heter Bilder, men vill inte att alla bilder som ligger inuti hämtade mappar samlas där. Bara bilder som ligger högst upp i en månadsmapp.

Länk till kommentar
Dela på andra webbplatser

Det lyckades!

 

Har inte tänkt eller ens försökt köra PHP som shell, men jag förstår att det är kul att göra små skript lokalt på systemet. Jag skulle ha stor glädje av att kunna göra mer sånt. Har vid olika tillfällen försökt lära mig lite mer om operativsystem och till att börja med hur man hanterar det via Terminalen. Men gett upp när det blivit för svårt och tidskrävande. Men det var kul att jag förstod mig på Automator och lyckades koppla ditt skript till det.

Var bra... :ThumbsUp:

 

Ja, ibland räcker inte bash till då är php riktigt smidigt att kunna köra direkt i Terminal. Du kan eg kör vilka php-filer som helst där med:

php filen.php

Eller så precis som med bash-skriptet, lägga till en s k shebang överst, så kan du köra det på samma sätt, dvs bara köra filen rakt upp och ner.

 

För php kommer du säkert stöta på olika typer av shebang's eftersom php installeras på så många olika ställen, och man kan ju själv ha fler olika versioner av php installerade. Så:

#!/usr/bin/php
#!/usr/local/bin/php

osv...

Så det är xtra bra/smidigt att köra den portabla varianten istället. “env” vet var php finns.

#!/usr/bin/env php

Sen kan du lägga in så det bara går att köra i Terminal, vilket är bra eftersom man kanske kör systemrelaterade grejjer där (system(), exec() osv). Inget man vill skall kunna köras i en webläsare. Så som en enkel mall, om du vill ha och pilla/leka med.

#!/usr/bin/env php
<?php
/**
 * /sökväg/till/filen.php
 *
 * Beskrivning: ...
 *
 */

if( php_sapi_name() != 'cli' )
{
    trigger_error('<pre>' . __FILE__ . ' kan endast köras i Terminal</pre>', E_USER_NOTICE);
    exit;
}

// Din kod här ...

 

Här var en rätt bra sida. http://gielberkers.com/php-as-cli-language/

Men det går ju att göra/köra enklare än så. :crossfingers::yeahbaby:

 

- - -

 

Är riktigt dålig på det där med mappkommandon, smarta mappar och sånt. Inget som jag känt att jag behövt, så man har aldrig satt sig in i det. Men ngn annan har säkert koll på det. :crossfingers:

Länk till kommentar
Dela på andra webbplatser

Några filer ligger kvar i Downloads-roten, utanför 2015-05-mappen.

 

Edit 2: Ang. filerna utanför så tror jag dom ligger där korrekt, dom har namn-struktur som säkert tolkats som datum med regexen.

I slutet av regex,'en, stoppa in ett “$” så stannar den där. Testade med en fil: “2015-05-annanfil.txt” ...och den hängde med i flytten. :crossfingers:

... \{2\}\)/g')

... \{2\}\)$/g')

- - -

 

Har uppdaterat scriptet med det + jag la in lite “skydd” mot ev olyckor, så det inte kan köras på t ex hemfoldern, root el andra foldrar i root. Skyddar inte mot allt så om man anger en specifik folder längre in i systemet så körs den. Men mot ev olyckor ... t ex man råkar få inte ett blanksteg så det blir “/” som den vill köra. Vore inte så lyckat, kanske. :)

 

Uppdaterat första inlägget med skriptet...

Länk till kommentar
Dela på andra webbplatser

Peter Westerlund

I slutet av regex,'en, stoppa in ett “$” så stannar den där. Testade med en fil: “2015-05-annanfil.txt” ...och den hängde med i flytten. :crossfingers:

... \{2\}\)/g')

... \{2\}\)$/g')

- - -

 

Har uppdaterat scriptet med det + jag la in lite “skydd” mot ev olyckor, så det inte kan köras på t ex hemfoldern, root el andra foldrar i root. Skyddar inte mot allt så om man anger en specifik folder längre in i systemet så körs den. Men mot ev olyckor ... t ex man råkar få inte ett blanksteg så det blir “/” som den vill köra. Vore inte så lyckat, kanske. :)

 

Uppdaterat första inlägget med skriptet...

 

Fantastiskt! :) Vilken otrolig hjälp man får av dig!

 

Har levt med denna sortering i Downloads i två dagar nu. Upptäckt några problem med det tyvärr. Det ena är att när jag öppnar Finder och klickar mig in på Downloads så är man i Apples kolumn-läge där man inte kan få det sorterat i den ordning man vill. Man kan via menyn "Innehåll" -> "Ordna efter" välja att ordna efter namn, men jag kan inte välja ASC eller DESC. Det är ASC som är det enda som gäller. Så när jag kommer in i Downloads så är mapparna listade med den äldsta mappen övers (eftersom datumen bildar det lägsta namn-värdet). Har försökt ändra ordning via "högerklick" och Ändra visningsalternativ också, men blir inte riktigt klok på hur allt detta med ändring av ordning fungerar. Det verkar inte sparas alltid till nästa gång jag går in i en mapp och man kan som sagt inte välja ASC eller DESC där heller.

 

Det andra problemet som dök upp är att när man laddar ner en fil från webben (t ex dl_cleanup.sh.zip) så kan jag inte klicka på att öppna den via webbläsarens filhämtare, eftersom filen inte finns när den blivit nedladdad, den har ju förflyttats in till 2015-05-mappen.

 

Så jag funderar just nu på hur jag kan tänka om sorteringen. Såg någonstans en lösning där senaste 20 hämtade ligger kvar, men äldre flyttas. Det är ju en idé man kan försöka applicera till systemet. Ska fundera lite till på hur jag vill ha det...

Länk till kommentar
Dela på andra webbplatser

Tack... :yeahbaby: Kom på det, om du tog ner uppdateringen - glöm inte att lägga in fixet där för “.savedSearch” igen. :crossfingers:

 

Det ena är att när jag öppnar Finder och klickar mig in på Downloads så är man i Apples kolumn-läge där man inte kan få det sorterat i den ordning man vill.

Hur Finder sorterar blir ju samma sak hur man än gör - med el utan skript(s) och flytt. Jag kör rakt upp och ner, allt i bokstavsordning. Men man borde väl kunna ändra lite där även så det stannar kvar.

Så när jag kommer in i Downloads så är mapparna listade med den äldsta mappen övers (eftersom datumen bildar det lägsta namn-värdet).

Ja, de hamnar ju (i princip) överst/först i listan med tanke på att det är siffror. Ett enkelt fix är att du kanske kör med ett prefix på foldrarna. Det “borde” räcka om du ändra till:

ARCHIVE=z_$(date "+%Y-%m");

# eller 
ARCHIVE="z_$(date "+%Y-%m")";

Du kan ju ha vilket prefix du vill ha, x, z, x_, z_ ... Jag brukar själv köra med “x_”, fast z kommer ju efter x i alfabetet så det är kanske bättre. Är vana bara...

Som sagt, det borde räcka - ev att man får pilla lite i regex där (har inte testat nåt). Glöm inte att ändra den befintliga foldrarna bara så inte de försvinner in i en ny z_2015-05 s a s.

Det andra problemet som dök upp är att när man laddar ner en fil från webben (t ex dl_cleanup.sh.zip) så kan jag inte klicka på att öppna den via webbläsarens filhämtare, eftersom filen inte finns när den blivit nedladdad, den har ju förflyttats in till 2015-05-mappen.

Hm, det har jag nog inte varit med om. Inte haft det problemet i a f. Finder brukar kunna hitta flyttade filer, såvida de inte är kastade. Kanske det är för at de blivit flyttade med Terminal och inte med just själva Finder som gör att den den inte hänger med.

Såg någonstans en lösning där senaste 20 hämtade ligger kvar, men äldre flyttas.

Är det en fix för Automatordelen? Ett annat alternativ är ju att du skippar automator och kör ett launchd-skript (typ cron), som körs den sista varje månad. Så har/använder du nerladdningsfoldern som vanligt - alla filer där är senaste månaden och innan den går över i ny månad sopar den in allt i en mapp. Nåt sånt...

Länk till kommentar
Dela på andra webbplatser

Peter Westerlund

glöm inte att lägga in fixet där för “.savedSearch” igen. :crossfingers:

 

 

Jag tänkte på det ;)

 

Tror jag vill göra så att jag skapar alla månadsmappar på nytt men i "rätt" ordning. Jag börjar med att skapa den äldsta mappen osv. Så får dom rätt tidsordning, så kan jag sortera på tilläggsdatum.

 

Skulle dock vara skönt att slippa skapa alla mappar. Man kan inte ändra timestampen för en mapp på något sätt bara?

Länk till kommentar
Dela på andra webbplatser

Jag tänkte på det ;)

 

Tror jag vill göra så att jag skapar alla månadsmappar på nytt men i "rätt" ordning. Jag börjar med att skapa den äldsta mappen osv. Så får dom rätt tidsordning, så kan jag sortera på tilläggsdatum.

 

Skulle dock vara skönt att slippa skapa alla mappar. Man kan inte ändra timestampen för en mapp på något sätt bara?

Du kan prova att köra några “touch” på foldrarna. T ex:

touch -t 201504010000 2015-04/

Som blir “Onsdag, 1 april, 2015 00:00” på foldern “2015-04”

 

Med -m ändrar du ändringsdatumet bara.

touch -mt 201504010000 2015-04/

Sen kan du lägga till -c. Då skapas ingen ny fil/folder om den inte finns. Skulle det man skrivit vara fel, skapar den en fil av det man gjort... Kan ju vara skönt att slippa. Så, skall du slänga upp ett gäng helt nya (manuellt) kanske du skulle kunna köra nåt, typ:

mkdir -p 2015-{01..05}
for i in {01..05}; do touch -ct 2015${i}010000 2015-${i}/; done;

 

Vill du göra en sen för (hela) 2014:

mkdir -p 2014-{01..12}
for i in {01..12}; do touch -ct 2014${i}010000 2014-${i}/; done;

 

{x..y} är att den gör en serie av värdena mellan.

 

- - -

 

Skapa foldrar i “bulk” går vaaansinnigt mkt fortare än att pilla med det i Finder. :ThumbsUp:

Länk till kommentar
Dela på andra webbplatser

Peter Westerlund

Sorterar på tilläggsdatum, får ändå inte dem i rätt ordning.

Sk%C3%A4rmklipp%202015-05-16%2000.58.16.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.



×
×
  • Skapa nytt...