Här är koden till min ftp-ande mapp och därtill hörande förklaringar.
Observera att ni måste anpassa båda skripten, annars kommer det inte att fungera!
Håll till godo!
Gör så här
Steg 1
Skapa en mapp någonstans, kom ihåg sökvägen och namnet. Mappen är till för att dumpa filerna som ska skickas.
Steg 2
Skapa nu en mapp i din hemkatalog som heter Scripts. Om du redan har en plats där du sparar egna shellscript behöver du inte skapa någon ny mapp.
Steg 3
Skapa shellskriptet. Enklast är att använda någon vanlig editor typ SubEthaEdit eller Smultron, men även TextEdit borde gå bra.
Ändra det som står inom *såna här* (och radera själva stjärnorna) i skriptet enligt följande:
Ändra på rad 5 så att ditt sökvägen till din hemkatalog stämmer.
Ändra på rad 32 och skriv in IP-adress, loginnamn och lösen till den ftp-server du ska ansluta till.
Ändra på rad 39 och skriv in IP-adressen till ftp-servern även här.
Spara skriptet som "ftp_to_server.sh" i mappen Scripts i din hemkatalog.
Steg 4
Skapa Appleskriptet.
Ändra rad 16 så att sökvägen stämmer överens med mappen du skapade i Steg 1. Själva mappnamnet ska inte vara med. (Ex: Om du skapade /Users/Nisse/ftpmapp så ska det stå /Users/Nisse/ (Observera snedstrecket på slutet! ))
Editera också rad 20 så att sökvägen till shellskriptet stämmer med var du sparade det i Steg 3.
Spara skriptet som "add - ftp to server" i /Library/Scripts/Folder Action Scripts.
Steg 5
Bind Appleskriptet som en Folder Action till mappen du skapade i Steg 1. Högerklicka på mappen och välj Attach a Folder Action...
Navigera till /Library/Scripts/Folder Action Scripts och välj ditt skript.
Steg 6
Nu ska det vara klart för provkörning. Kopiera en fil till din mapp och se om vi har gjort rätt.
Appleskript - /Library/Scripts/Folder Action Scripts/add - ftp to server.scpt
-- set the amount of time before dialogs auto-answer.
property dialog_timeout : 30
on adding folder items to this_folder after receiving added_items
try
tell application "Finder"
--get the name of the folder
set the folder_name to the name of this_folder
repeat with eachItem in the added_items
set item_name to name of eachItem
display dialog "Vill du kopiera " & item_name & " till ftp-servern?" buttons {"Yes", "No"} default button 2
set the user_choice to the button returned of the result
set the full_path to "/Users/macce/" & folder_name & "/" & item_name
if user_choice is "Yes" then
set UT to (do shell script "/Users/macce/Scripts/ftp_to_server.sh " & full_path)
display dialog UT
end if
end repeat
end tell
end try
end adding folder items to
Shellskript - /Users/ditt användarnamn/Scripts/ftp_to_server.sh
#!/bin/bash
FILE_TO_UPLOAD=$*
NETRCFILE=/Users/*macce*/.netrc
# Check for file name as argument, if none then exit
if [ "$1" = "" ]; then
echo
echo You should provide me with a file name, cannot continue.
echo
exit
fi
# Check that given file really exists in directory
echo Checking for existance of file $1
if [ -f "$FILE_TO_UPLOAD" ]; then
echo OK
else
echo
echo File not found in html directory: $1
echo Check the file name and try again.
echo
exit
fi
FILE=`basename "$FILE_TO_UPLOAD"`
# Create the file ~/.netrc for automatic login and execution at ftp server
touch $NETRCFILE
chmod 700 $NETRCFILE
echo machine *ip-adress eller dns-namn* login *loginnamn* password *abc123* > $NETRCFILE
echo macdef init >> $NETRCFILE
echo put \"$FILE_TO_UPLOAD\" \"$FILE\" >> $NETRCFILE
echo bye >> $NETRCFILE
echo >> $NETRCFILE
# Run ftp to connect to the ftp server and upload the file
ftp *ip-address*
# Clean up, do not leave a file around containing login name and password...
rm $NETRCFILE
exit 0
Förklaring
Appleskriptet körs varje gång man lägger till något i mappen som man bundit skriptet till. Man får en fråga för varje fil man har lagt till, och svarar man Ja så körs shellskriptet en gång. Man får även en svarsdialog som visar resulatet (utseendet på denna varierar beroende på ftp-servern).
Shellskriptet skapar en fil i hemkatalogen (.netrc) som används som manus för ftp-sessionen. Filen innehåller kommandon som ska köras när man loggar in mot en given ftp-server. Om du redan använder en .netrc så måste du ändra i mitt skript!
Disclaimer: Dessa skript används på egen risk. De är testade på min dator och fungerar där, men jag tar inget ansvar om ni kör dem och något går fel.
Givetvis är det fritt fram att modifiera skripten! Lägg gärna förbättringstips här i tråden.