How to do things
AI Noob vs. Pro

List biggest files
List newest files
Show subdir sizes
Search in files
Replace word in files
List dir differences
Send files in LAN

Free Open Source:

Swiss File Knife

a command line
multi function tool.

remove tabs
list dir sizes
find text
filter lines
find in path
collect text
instant ftp or
http server
file transfer
send text
patch text
patch binary
run own cmd
convert crlf
dup file find
md5 lists
fromto clip
hexdump
split files
list latest
compare dirs
save typing
trace http
echo colors
head & tail
dep. listing
find classes
speed shell
zip search
zip dir list

Depeche View
Source Research
First Steps

windows GUI
automation

command line
file encryption

free external tools,
zero install effort,
usb stick compliant:

zip and unzip
diff and merge
reformat xml
reformat source

cpp sources

log tracing
mem tracing
hexdump
using printf

articles

embedded
stat. c array
stat. java array
var. c array
var. java array
view all text
as you type
surf over text
find by click
quick copy
multi view
find nearby
fullscreen
bookmarks
find by path
expressions
location jump
skip accents
clip match
filter lines
edit text
highlight
load filter
hotkey list
receive text
send in C++
send in Java
smooth scroll
touch scroll
fly wxWidgets
fly over Qt
search Java

Supersonic Text File Search - Free Download

instantly run a simple no-installation ftp client on the command line, to allow ftp file transfer between any Windows, Mac OS X, Linux, Raspberry Pi machine, non-interactively in a batch file. the free open source sfk ftp client is best used with the free sfk ftpserver.
  • Download the free Swiss File Knife Base from Sourceforge.
  • Open the Windows CMD command line, Mac OS X Terminal or Linux shell.
  • OS X : type mv sfk-mac-64.exe sfk and chmod +x sfk then ./sfk
  • Linux: type mv sfk-linux-64.exe sfk and chmod +x sfk then ./sfk. OS X and Linux syntax may differ, check the help within the tool.
sfk ftp host[:port] [options] [command [parms]
sfk sft host[:port]

The SFK FTP Client.

sfk ftp hostname
   uses plain FTP protocol via port 21
   to speak with any (non SFK) FTP server.

sfk sft hostname
   uses SFT Simple File Transfer via port 2121
   for better connectivity, file attributes and
   multi file transfer, with SFK SFT servers only.

commands
   put x     send a single file with name x
   put l r   send local file l with remote name r
   get x     receive a single file with name x
   get r l   receive file r with local name l
   mput x    send multiple files of the current directory
             having x in their filename
   mput .ext send multiple files ending with .ext
   mget x    receive multiple files from the ftp server
             having x in their filename
   mget .ext receive multiple files ending with .ext
   dir       list the remote directory
   cd x      change into remote directory x
   lcd x     change into local  directory x
   !mycmd    execute local command mycmd
   bye       exit

names with whitespace require quotes
   when using names with blanks, like "the file.txt",
   these must be surrounded by double quotes "".

with SFT only:
   cput x    send new or changed files of the current dir.
             if the server time (zone) is incompatible
             this will not work and may send all files
             or never any files.
   cget x    receive new or changed files of the current
             directory on the server.
             same restrictions apply as with cput.
   run cmd   run remote command, if server allows.

options
   -spat     activate slash patterns like \t \q \xnn
             which can be useful in run expressions.
   -notify=h display an arrow in SFKTray 1.1 running on
             hostname h whenever files are actually sent.
   -raw      force ftp protocol even when connected with an
             sfk ftp server. default under windows, since
             sfk 1.8.5, when using port 21.
   -sft      allow sft protocol even when using port 21 with
             an sfk ftp server. you may also set variable
                set SFK_CONFIG=usesft
   -verbose  list the transmitted ftp commands,
             and tell if SFK_FTP_USER/PW variable is used.
             helpful to get more infos in case of errors.
   -force    continue transfer after errors.
   -showip   tell how short ip's like .1 are expanded.
   -quiet    disable progress indicator and other output.
   -noprog   no progress indicator during transfers.
   -user=x   or -user x sends username x instead of anonymous.
             you may also set an environment variable like:
                set SFK_FTP_USER=myuser
             or set SFK_FTP_CUSER=myuser
             with the latter one being used only by the
             sfk ftp command, but not by sfk ftpserv.
   -pw=x     or -pw x sends an authentication password x.
             you may also set an environment variable like:
                set SFK_FTP_PW=mypassword
             or set SFK_FTP_CPW=mypassword

with SFT only:
  -noclone   do not copy time stamps on put/get.
  -pres      always preserve full file attributes, including
             readonly modes. default is to keep file writeable
             by file owner and to apply umask under linux.
  -verify    extra verify by re-reading files after transfer
             and comparing against a transmitted md5 checksum.
  -setexec=x  when sending files to a linux server, set files
              matching pattern x as executable (chmod +x).

aliases
   sfk sft                same as sfk ftp but using port 2121
   sfk list ... +put      same as: sfk list ... +sft ... cput
                          to send only changed and new files.
   sfk list ... +putall   same as: sfk list ... +sft ... mput
                          to send all selected files.
   sfk sft 100 putx x.sh  same as: put -setexec=* x.sh

automatic IP expansion
   if you are in the same subnet as the target host,
   you may supply only the IP number's last part(s), e.g.:
      sfk ftp 23   ... == sfk ftp 192.168.1.23 ...
      sfk ftp 2.23 ... == sfk ftp 192.168.2.23 ...
   this feature may or may not work, depending on your
   operating system and number of network interfaces.
   add option -showip to see what the expanded IP is.

transfer protocol selection
   since SFK 1.8.5, when using "sfk ftpserv" at the server
   and "sfk ftp" at the windows client, plain FTP protocol
   is used to avoid firewall restrictions via port 21.
   to use SFT Simple File Transfer for better connectivity
   and cput/cget support run the server as "sfk sftserv"
   and the client as "sfk sft", which will use port 2121.

file attributes
   since SFK 1.6.7, when using the SFT protocol,
   linux file attributes are sent and written at the receiver,
   except for file owner 'rw' flags which are set by default
   to allow rewrite in future transfers. when sending from
   linux to windows attributes like 'x' get lost.

problems and solutions:
   if sfk to sfk file transfer via port 21 is stopped
   with ECONNRESET or ECONNABORTED this is probably caused
   by a firewall. try option -raw to use plain FTP.
   alternatively use "sfk sftserv" on server and "sfk sft"
   at the client, which uses the unrestricted port 2121.
   read more under: sfk ftpserv -help

return codes for batch files
   0   no files sent
   1   any files sent

see also
   sfk ftpserv -help

web reference
   http://stahlworks.com/sfk-ftp

examples
   sfk ftp farpc put test.zip
      send test.zip to farpc
   sfk ftp farpc put test.zip "the dir/test1.zip"
      the same, but with remote name test1.zip
      in a target folder "the dir".
   sfk ftp -user=foo -pw=bar farpc put test.zip
      the same but with authentication
   sfk ftp 192.168.1.99:30199 get test.zip
      receive test.zip from 192.168.1.99 port 30199
   sfk ftp farpc mput .cpp
      send all .cpp files of the local dir to farpc.
      subfolder contents are NOT included.
   sfk ftp farpc mget *
      receive all files from farpc's directory,
      overwriting everything in the local directory.
   sfk ftp hostname
      enter interactive mode, in which you can type
      the above commands directly. for example,
         !dir runs the command "dir" locally.
   sfk sel -today mydir .css .php +ftp farpc mput
      upload all .css and .php files changed today
      within the mydir folder to FTP server farpc.
      before doing so, make sure that farpc has the
      same folder structure (mydir at top level).
   sfk today mydir .css .php +ftp farpc cput
      similar as above, but checks also on farpc
      which of the selected files actually differ.

IF using SFT with an sfk sft server:

   best practice is to run an sft (simple file transfer)
   server on the other PC or VM like:

   sfk sftserv -rw

   this will use port 2121, avoiding firewall and other
   restrictions that usually block use of ftp port 21.
   then the following can be used by an sfk client:

   sfk sft farpc get myfile.txt
      download myfile.txt instantly. if a local file
      exists with the same name then it is overwritten.

   sfk sft farpc get myfile.txt newfile.txt
      download myfile.txt, but write it locally with
      a different filename newfile.txt

   sfk sft farpc put myfile.txt newfile.txt
      send myfile.txt, but write it with a
      different name newfile.txt at the server.

   sfk sft farpc dir "the dir"
      show contents of folder 'the dir'.

   sfk sft farpc get "the dir/a file.txt" local.txt
      download 'a file.txt' in remote folder 'the dir'
      to a different local filename 'local.txt'.

   sfk sft farpc mget myfile
      download all files having "myfile" in their name.
      sfk will show a "simulating" preview first.
      add -yes to really download the files.

   sfk sft farpc mput myfile
      send all files having "myfile" in their name.
      if files with same name exist at server then
      they are overwritten.

   sfk sft farpc get the\sub\dir\doc.txt
      by default, sfk sftserv allows deep direct access
      to files within folders. all required output dirs
      are created automatically. this deep access cannot
      be used with mget and mput.

   sfk sel mydir .txt +sft farpc cput
      send all .txt files within mydir that changed since
      the last transmission to farpc.

   sfk filter filelist.txt +sft farpc mget mydir
      create a list with filenames, download the files listed
      therein from server farpc into a folder "mydir".

   sfk sft 192.168.1.100 cput .txt
      connect to server .100 and send all .txt files
      which are newer or were added in the local folder.

   sfk sft 2.100 cget .txt
      connect to a server like, for example, 192.168.2.100
      and download all .txt files which are newer or were
      added in the remote folder.

   sfk sft farpc -pw mypw run "sh myscript.sh >tmp1.txt 2>&1"
      execute a command on the remote server, redirecting all
      output into a file tmp1.txt. requires an sfk sft server
      with option -run, AND -pw authentication on both sides.

   sfk today mydir +sft -quiet .100 cput -yes +sleep 3000 +loop
      check mydir every 3 seconds for files changed today
      and upload them to .100 if newer as on server.

   sfk sft .100 put -setexec=* tmp.sh
      send tmp.sh to a linux server, and make sure
      it can be run by setting chmod +x on the target file.

   sfk sft ~ dir
      list files on localhost port 2121

   sfk sft ~3000 dir
      list files on localhost port 3000

NOTE: existing files are overwritten without asking back.
   Make sure that ftp server and client are running
   in the correct directories, especially before mput/mget.

 
sfk ftp host[:port] [options] [command 
   [parms]
sfk sft host[:port]

The SFK FTP Client.

sfk ftp hostname
   uses plain FTP protocol via port 21
   to speak with any (non SFK) FTP server.

sfk sft hostname
   uses SFT Simple File Transfer via 
   port 2121 for better connectivity, file
   attributes and multi file transfer, with
   SFK SFT servers only.

commands
   put x     send a single file with name x
   put l r   send local file l with remote 
             name r
   get x     receive a single file with 
             name x
   get r l   receive file r with local 
             name l
   mput x    send multiple files of the 
             current directory having x in
             their filename
   mput .ext send multiple files ending 
   with .ext mget x receive multiple
   files from the ftp server
             having x in their filename
   mget .ext receive multiple files ending 
   with .ext dir  list the remote
   directory cd x change into remote
   directory x lcd x  change into local
   directory x !mycmd execute local
   command mycmd bye  exit

names with whitespace require quotes
   when using names with blanks, like "the 
   file.txt", these must be surrounded by
   double quotes "".

with SFT only:
   cput x    send new or changed files of 
             the current dir. if the server
             time (zone) is incompatible
             this will not work and may
             send all files or never any
             files.
   cget x    receive new or changed files 
             of the current directory on
             the server. same restrictions
             apply as with cput.
   run cmd   run remote command, if server 
             allows.

options
   -spat     activate slash patterns like \
             t \q \xnn which can be useful
             in run expressions.
   -notify=h display an arrow in SFKTray 
    1.1 running on
             hostname h whenever files are 
             actually sent.
   -raw      force ftp protocol even when 
             connected with an sfk ftp
             server. default under windows,
             since sfk 1.8.5, when using
             port 21.
   -sft      allow sft protocol even when 
             using port 21 with an sfk ftp
             server. you may also set
             variable
                set SFK_CONFIG=usesft
   -verbose  list the transmitted ftp 
             commands, and tell if
             SFK_FTP_USER/PW variable is
             used. helpful to get more
             infos in case of errors.
   -force    continue transfer after errors.
   -showip   tell how short ip's like .1 
             are expanded.
   -quiet    disable progress indicator and 
             other output.
   -noprog   no progress indicator during 
             transfers.
   -user=x   or -user x sends username x 
                 instead of anonymous.
             you may also set an 
             environment variable like:
                set SFK_FTP_USER=myuser
             or set SFK_FTP_CUSER=myuser
             with the latter one being used 
             only by the sfk ftp command,
             but not by sfk ftpserv.
   -pw=x     or -pw x sends an 
             authentication password x. you
             may also set an environment
             variable like:
                set SFK_FTP_PW=mypassword
             or set SFK_FTP_CPW=mypassword

with SFT only:
  -noclone   do not copy time stamps on 
             put/get.
  -pres      always preserve full file 
             attributes, including readonly
             modes. default is to keep file
             writeable by file owner and to
             apply umask under linux.
  -verify    extra verify by re-reading 
             files after transfer and
             comparing against a
             transmitted md5 checksum.
  -setexec=x  when sending files to a linux 
              server, set files matching
              pattern x as executable
              (chmod +x).

aliases
   sfk sft                same as sfk ftp 
                          but using port
                          2121
   sfk list ... +put      same as: sfk 
                        list ... +sft ...
                        cput
                          to send only 
                        changed and new
                        files.
   sfk list ... +putall   same as: sfk 
                list ... +sft ... mput
                          to send all 
                       selected files.
   sfk sft 100 putx x.sh  same as: put 
 -setexec=* x.sh

automatic IP expansion
   if you are in the same subnet as the 
   target host, you may supply only the IP
   number's last part(s), e.g.:
      sfk ftp 23   ... == sfk ftp 
                   192.168.1.23 ...
      sfk ftp 2.23 ... == sfk ftp 
      192.168.2.23 ...
   this feature may or may not work, 
   depending on your operating system and
   number of network interfaces. add option
   -showip to see what the expanded IP is.

transfer protocol selection
   since SFK 1.8.5, when using "sfk 
   ftpserv" at the server and "sfk ftp" at
   the windows client, plain FTP protocol
   is used to avoid firewall restrictions
   via port 21. to use SFT Simple File
   Transfer for better connectivity and
   cput/cget support run the server as "sfk
   sftserv" and the client as "sfk sft",
   which will use port 2121.

file attributes
   since SFK 1.6.7, when using the SFT 
   protocol, linux file attributes are sent
   and written at the receiver, except for
   file owner 'rw' flags which are set by
   default to allow rewrite in future
   transfers. when sending from linux to
   windows attributes like 'x' get lost.

problems and solutions:
   if sfk to sfk file transfer via port 21 
   is stopped with ECONNRESET or
   ECONNABORTED this is probably caused by
   a firewall. try option -raw to use plain
   FTP. alternatively use "sfk sftserv" on
   server and "sfk sft" at the client,
   which uses the unrestricted port 2121.
   read more under: sfk ftpserv -help

return codes for batch files
   0   no files sent
   1   any files sent

see also
   sfk ftpserv -help

web reference
   http://stahlworks.com/sfk-ftp

examples
   sfk ftp farpc put test.zip
      send test.zip to farpc
   sfk ftp farpc put test.zip "the 
   dir/test1.zip"
      the same, but with remote name 
      test1.zip in a target folder "the
      dir".
   sfk ftp -user=foo -pw=bar farpc put 
                       test.zip
      the same but with authentication
   sfk ftp 192.168.1.99:30199 get test.zip
      receive test.zip from 192.168.1.99 
      port 30199
   sfk ftp farpc mput .cpp
      send all .cpp files of the local dir 
      to farpc. subfolder contents are NOT
      included.
   sfk ftp farpc mget *
      receive all files from farpc's 
      directory, overwriting everything in
      the local directory.
   sfk ftp hostname
      enter interactive mode, in which you 
      can type the above commands directly.
      for example,
         !dir runs the command "dir" 
         locally.
   sfk sel -today mydir .css .php +ftp 
             farpc mput
      upload all .css and .php files 
      changed today within the mydir folder
      to FTP server farpc. before doing so,
      make sure that farpc has the same
      folder structure (mydir at top level).
      
   sfk today mydir .css .php +ftp 
   farpc cput
      similar as above, but checks also on 
      farpc which of the selected files
      actually differ.

IF using SFT with an sfk sft server:

   best practice is to run an sft (simple 
   file transfer) server on the other PC or
   VM like:

   sfk sftserv -rw

   this will use port 2121, avoiding 
   firewall and other restrictions that
   usually block use of ftp port 21. then
   the following can be used by an sfk
   client:

   sfk sft farpc get myfile.txt
      download myfile.txt instantly. if a 
      local file exists with the same name
      then it is overwritten.

   sfk sft farpc get myfile.txt 
   newfile.txt
      download myfile.txt, but write it 
      locally with a different filename
      newfile.txt

   sfk sft farpc put myfile.txt 
   newfile.txt
      send myfile.txt, but write it with a
      different name newfile.txt at the 
      server.

   sfk sft farpc dir "the dir"
      show contents of folder 'the dir'.

   sfk sft farpc get "the dir/a file.txt" 
   local.txt
      download 'a file.txt' in remote 
      folder 'the dir' to a different local
      filename 'local.txt'.

   sfk sft farpc mget myfile
      download all files having "myfile" in 
      their name. sfk will show a
      "simulating" preview first. add -yes
      to really download the files.

   sfk sft farpc mput myfile
      send all files having "myfile" in 
      their name. if files with same name
      exist at server then they are
      overwritten.

   sfk sft farpc get the\sub\dir\doc.txt
      by default, sfk sftserv allows deep 
      direct access to files within folders.
      all required output dirs are created
      automatically. this deep access
      cannot be used with mget and mput.

   sfk sel mydir .txt +sft farpc cput
      send all .txt files within mydir that 
      changed since the last transmission
      to farpc.

   sfk filter filelist.txt +sft farpc mget 
                             mydir
      create a list with filenames, 
      download the files listed therein
      from server farpc into a folder
      "mydir".

   sfk sft 192.168.1.100 cput .txt
      connect to server .100 and send all 
      .txt files which are newer or were
      added in the local folder.

   sfk sft 2.100 cget .txt
      connect to a server like, for example,
      192.168.2.100 and download all .txt
      files which are newer or were added
      in the remote folder.

   sfk sft farpc -pw mypw run "sh 
                   myscript.sh >tmp1.txt
                   2>&1"
      execute a command on the remote 
      server, redirecting all output into a
      file tmp1.txt. requires an sfk sft
      server with option -run, AND -pw
      authentication on both sides.

   sfk today mydir +sft -quiet .100 cput 
                          -yes +sleep 3000
                          +loop
      check mydir every 3 seconds for files 
      changed today and upload them to .100
      if newer as on server.

   sfk sft .100 put -setexec=* tmp.sh
      send tmp.sh to a linux server, and 
      make sure it can be run by setting
      chmod +x on the target file.

   sfk sft ~ dir
      list files on localhost port 2121

   sfk sft ~3000 dir
      list files on localhost port 3000

NOTE: existing files are overwritten without asking back. Make sure that ftp server and client are running in the correct directories, especially before mput/mget.

you are viewing this page in mobile portrait mode with a limited layout. turn your device right, use a desktop browser or buy the sfk e-book for improved reading.

 
sfk is a free open-source tool, running instantly without installation efforts. no DLL's, no registry changes - just get sfk.exe from the zip package and use it (binaries for windows, linux and mac are included).

 

the Endless Image 🍣 Sushi