Sometimes you just want to quickly move a copy of a script, image or binary from, for example, your local (linux) machine to another (linux) machine. The usual tool would be SCP, but this can get complicated when there are several layers of ssh and sometimes it doesn’t work at all (as is the case for transfers between the Department of Statistics computers and the outside world).
I have written a nice little script which makes use of hosting on file.io, as well as cURL, to upload files, and put a wget command into the clipboard which can be easily used to download it from any terminal window (and therefore on any system you can log in to). Folders will be compressed and the clipboard command will automatically unzip the result.
The only dependency is xclip, which can be installed on Ubuntu with:
sudo apt-get install xclip
If you put this somewhere on your path, call it upload_small_file.sh and change its permissions (chmod +x upload_small_file.sh) and add a symlink (ln -s upload_small_file.sh uag) then you can call it like so:
uag my_file.txt
So with all that said, here’s the script:
#!/usr/bin/bash
if [ -z "$1" ]; then
echo "Please supply a file to upload"
exit 1
fi
ARG="$1"
ISFOLDER=0
if [ -d "$ARG" ]; then
ARG=$ARG.tar.gz
echo "Argument passed is a folder; creating temporary archive $ARG"
tar -cvf $ARG $1
ISFOLDER=1
fi
FNAME=$(basename -- $ARG)
OUTPUT=$(curl -F "file=@$ARG" -s -w "\n" https://file.io)
SUCCESS=$(echo "$OUTPUT" | awk -F '"' '{print $2}')
if [ $SUCCESS = "success" ]; then
LINK=$(echo "$OUTPUT" | awk -F '"' '{print $10}')
if [ $ISFOLDER = 1 ]; then
echo "wget -O $FNAME $LINK; tar -xvf $ARG; rm -rf $ARG" | xclip
else
echo "wget -O $FNAME $LINK" | xclip
fi
echo "Sucessfully uploaded to $LINK which has been copied to clipboard"
if [ $ISFOLDER = 1 ]; then
echo "Deleting temporary archive $ARG..."
rm -rf $ARG
echo "Deleted."
fi
else
echo "There was a problem uploading this file:"
echo $OUTPUT
fi
The link (e.g. wget <generated_link> -O myfile.txt) will be in your middle mouse wheel, to be used in whichever terminal you want to download the file to.
