Need help with rfd?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

130 Stars 11 Forks MIT License 631 Commits 1 Opened issues


Ruby on Files & Directories

Services available


Need anything else?

Contributors list

rfd (Ruby on Files & Directories)

rfd is a terminal-based filesystem explorer, inspired by the legendary freesoft MS-DOS filer, "FD".


% gem install rfd


  • Ruby 2.0, Ruby 2.1
  • NCurses

Tested environments

Mac OS X Mountain Lion, Mac OS X Lion, Ubuntu 13.04



Start Me Up

Open up your terminal and type:

% rfd

You can also pass in a starting directory name, which defaults to

% rfd ~/src/rails


You can send commands to rfd by pressing some chars on your keyboard, just like Vim. If you're unfamiliar with this sort of command system, I recommend you to play with

before you go any further.

All available commands in rfd are defined as Ruby methods here.

Changing the current directory

  • : cd into the directory where the cursor is on.
  •  (or <Backspace> on your keyboard, probably?): Go up to the upper directory (cd ..).
  • -
    : Get back to where you once belonged (popd).
  • @
    : cd to a directory given via the command-line window.

Moving the cursor

  • j
    : Move down.
  • k
    : Move up.
  • h
    : Move left. At the leftmost column, move to the right end column at the previous page.
  • l
    : Move right. At the rightmost column, move to the left end column at the next page.

The {count} parameter

Some commands such as

take a number parameter called {count}. For passing a {count} parameter, just type in a number prior to the command. For example,
moves the cursor to 3 lines below, and
will take your cursor to 999 lines above.

Jumping the cursor

  • H
    : Move to the top of the current page.
  • M
    : Move to the middle of the current page.
  • L
    : Move to the bottom of the current page.

Switching the page

  • ctrl-n, ctrl-f
    : Move to the top of the next page.
  • ctrl-p, ctrl-b
    : Move to the top of the previous page.
  • g
    : Move to the top of the first page.
  • G
    : Move to the bottom of the last page.

Finding a file / directory

You can find a file by typing the first letter of it immediately after the find commands.

  • f{char}
    : Move to the next file / directory of which name starts with the given char.
  • F{char}
    : Move to the previous file / directory of which name starts with the given char.
  • n
    : Repeat the last

Searching, sorting

For commands like these that require a parameter string, type the parameter in the command line at the bottom of the screen, and press <Enter>.

  • /
    : Grep the current directory with the given parameter. The parameter will be interpreted as Ruby Regexp (e.g.
  • s
    : Sort files / directories in the current directory in the given order.
    • (none): by name
    • r : reverse order by name
    • s, S : order by file size
    • sr, Sr: reverse order by file size
    • t : order by mtime
    • tr : reverse order by mtime
    • c : order by ctime
    • cr : reverse order by ctime
    • u : order by atime
    • ur : reverse order by atime
    • e : order by extname
    • er : reverse order by extname

Marking files / directories

You can send a command to the file / directory on which the cursor is on. Or, you can send a command to multiple files / directories at once by marking them first. The mark is drawn as a

char on the left of each file / directory name.
  • : Mark / unmark current file / directory.
  • ctrl-a
    : Mark / unmark all file / directories in the current directory.

Manipulating files / directories

As stated above, you can send a command to one or more files / directories. In this document, the term "selected items" means "(the marked files / directories) || (the file / directory on which the cursor is on)".

  • c
    : Copy selected items (cp).
  • m
    : Move selected items (mv).
  • d
    : Move selected items into the Trash.
  • D
    : Delete selected items.
  • r
    : Rename selected items. This command takes a sed-like argument separated by a
    . For example, changing all .html files' extension to .html.erb could be done by

Yank and Paste

works just like Windows-c & Windows-v on explorer.exe.
  • y
    : Yank selected items.
  • p
    : Paste yanked items into the directory on which the cursor is, or into the current directory.

Creating files / directories

  • t
    : Create a new file (touch).
  • K
    : Creat a new directory (mkdir).
  • S
    : Create new symlink to the current file / directory (ln -s).


  • a
    : Change permission of selected items (chmod). Takes chmod-like argument such as
  • w
    : Change the owner of of selected items (chown). Takes chown-like argument such as

Viewing, Editing, Opening

  • : View current file with the system $VIEWER such as 
  • v
    : View current file with the system $VIEWER such as
  • e
    : Edit current file with the system $EDITOR such as
  • o
    : Send the

Manipulating archives

  • u
    : Unarchive .zip, .gz, or .tar.gz file into the current directory.
  • z
    : Archive selected items into a .zip file with the given name.

Handling .zip files

You can

into a .zip file as if it's just a directory, then unarchive selected items, view files in it, and even create new files or edit files in the archive.

Splitting columns

  • ctrl-w
    : Change the window split size to the {count} value (e.g.
    to split the window into 4 columns). The default number of columns is 2.

Using mouse

Mouse is available if your terminal supports it. You can move the cursor by clicking on a file / directory. Double clicking on a file / directory is equivalent to pressing <Enter> on it.


  • ctrl-l
    : Refresh the whole screen.
  • C
    : Copy selected items' paths to the clipboard.
  • O
    : Open a new terminal window at the current directory.
  • !
    : Execute a shell command.
  • q
    : Quit the app.

How to manually execute a command, or how the commands are executed

By pressing

, you can enter the command-line mode. Any string given in the command line after
will be executed as Ruby method call in the
instance. For instance,
brings your cursor down,
:mkdir foo
makes a directory named "foo". And
of course works as you might expect, since
method is implemented so.


Send me your pull requests here.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.