[TxMt] Editing using FTP & SCP commands

Andy Herbert andy.herbert at ntlworld.com
Mon Jun 19 17:46:05 UTC 2006


I was getting tired of waiting to fire up Transmit every time I  
wanted to edit a file with TextMate over FTP, so I decided to create  
my own modest script, I decided to post it here just in case anybody  
else found it useful

--- Start "ftpmate"
#!/usr/bin/env bash
REMOTE_FILE=$(echo $1 | awk -F '/' '{print $NF}')
LOCAL_FILE="/tmp/"$REMOTE_FILE
CD="/Applications/TextMate.app/Contents/SharedSupport/Support/bin/ 
CocoaDialog.app/Contents/MacOS/CocoaDialog bubble --background-top  
EFEFEF --background-bottom CACACA --icon-file /Applications/ 
TextMate.app/Contents/Resources/TextMate.icns"
ftp -o $LOCAL_FILE ftp://$1
if [[ $? = "0" ]]; then
	MD5_OUT=$(md5 $LOCAL_FILE)
	mate -w $LOCAL_FILE
	if [[ "$MD5_OUT" != "$(md5 $LOCAL_FILE)" ]]; then
		ftp -u ftp://$1 $LOCAL_FILE
		if [[ $? = "255" ]]; then
			$CD --title "FTPMate" --text "$REMOTE_FILE updated" &
		else
			$CD --title "FTPMate" --text "Unable to update $REMOTE_FILE" &
		fi
	fi
	rm -r $LOCAL_FILE
	else
		$CD --title "FTPMate" --text "Unable to retrieve $REMOTE_FILE" &
fi
--- End

usage : ftpmate [user[:password]@]host[:port]/path

The script attempts to fetch the file and writes it to /tmp/ where it  
is opened by TextMate, after the 'mate' process has ended a checksum  
is compared to the pre-opened checksum and if it has changed then the  
file is uploaded.

I decided to use the bubble requester in the CocoaDialog app because  
I am calling the script outside a shell session and want to know the  
file had successfully been uploaded.

Likewise I also made a script using SCP instead of FTP

--- Start "scpmate"
#!/usr/bin/env bash
REMOTE_FILE=$(echo $1 | awk -F '/|:' '{print $NF}')
LOCAL_FILE="/tmp/"$REMOTE_FILE
CD="/Applications/TextMate.app/Contents/SharedSupport/Support/bin/ 
CocoaDialog.app/Contents/MacOS/CocoaDialog bubble --background-top  
EFEFEF --background-bottom CACACA --icon-file /Applications/ 
TextMate.app/Contents/Resources/TextMate.icns"
scp $1 $LOCAL_FILE
if [[ $? = "0" ]]; then
	MD5_OUT=$(md5 $LOCAL_FILE)
	mate -w $LOCAL_FILE
	if [[ "$MD5_OUT" != "$(md5 $LOCAL_FILE)" ]]; then
		scp $LOCAL_FILE $1
		if [[ $? = "0" ]]; then
			$CD --title "SCPMate" --text "$REMOTE_FILE updated" &
		else
			$CD --title "SCPMate" --text "Unable to update $REMOTE_FILE" &
		fi
	fi
	rm -r $LOCAL_FILE
	else
		$CD --title "SCPMate" --text "Unable to retrieve $REMOTE_FILE" &
fi
--- End

usage : scpmate [user@]host:path




More information about the textmate mailing list