Home > Basic Linux-related things, Linux > Simple ad-hoc file sharing

Simple ad-hoc file sharing

January 1st, 2010

There is a distinct lack of simple, ad-hoc file sharing mechanisms for one-off file transfers between platforms. Maintaining an ftp or http server securely and grant users access to files is cumbersome. An ssh guest account opens more than you’d like, and still requires you to somehow grant access to a certain file to a user and then close it. IRC requires that the file is on the box you run the client on (which is often not your local box), and MSN requires that you add people to your contact list, assuming you don’t use it through bitlbee anyways.

Here is a little script I have lying around, I call it wwwshare:


die() { echo "$*" >&2; exit 1; }

[[ $# != 0 ]] || die "Usage: $0 filename"
[[ -f $1 ]]   || die "No such file: $1"

ip=$(curl -s 'http://checkip.dyndns.com/' | sed 's/.* \([0-9.]*\).*/\1/')
port=$((8000 + RANDOM%1000))

echo "http://$ip:$port/$file"

cat - "$file" << EOF | nc -l -p $port -q 0
HTTP/1.1 200 Ok
Content-Type: application/octet-stream
Content-Length: $(stat -c %s "$file")


Just run wwwshare filename, and it’ll print an URL and start a wannabe http server on a random port (8000-9000) for a single session. When the file is downloaded, it exits. No setup or cleanup required.

Basic Linux-related things, Linux

  1. | #1

    Markup engine screwed up ” and ‘

  2. Vidar
    | #2

    @ Voker57
    Eek! Should be fixed now, thanks.

  3. FCKGW
    | #3

    Great function. I adapted it in my .bash_profile so I can use it both on linux and my osx (bsd) but for LAN sharing. Can post the code if interested.

  4. pgas
    | #4

    Great Idea!
    I made a gnu awk port (for the lol, you know):

  5. Flupp
    | #5

    Great script!
    I just added a line using xclip to copy the url to the clipboard, and I replaced
    Content-Type: application/octet-stream
    Content-Type: $(file –brief –mime “$file”)
    which seems to help the browser.

  6. Vidar
    | #6


    Very convenient additions!

  1. | #1
  2. | #2