# gentle-fs [![npm version](https://img.shields.io/npm/v/gentle-fs.svg)](https://npm.im/gentle-fs) [![license](https://img.shields.io/npm/l/gentle-fs.svg)](https://npm.im/gentle-fs) [![Travis](https://img.shields.io/travis/npm/gentle-fs.svg)](https://travis-ci.org/npm/gentle-fs) [![AppVeyor](https://ci.appveyor.com/api/projects/status/github/npm/gentle-fs?svg=true)](https://ci.appveyor.com/project/npm/gentle-fs) [![Coverage Status](https://coveralls.io/repos/github/npm/gentle-fs/badge.svg?branch=latest)](https://coveralls.io/github/npm/gentle-fs?branch=latest)

[`gentle-fs`](https://github.com/npm/gentle-fs) is a standalone library for
"gently" remove or link directories.

## Install

`$ npm install gentle-fs`

## Table of Contents

* [Example](#example)
* [Features](#features)
* [Contributing](#contributing)
* [API](#api)
  * [`rm`](#rm)
  * [`link`](#link)
  * [`linkIfExists`](#linkIfExists)

### Example

```javascript
// todo
```

### Features

* Performs filesystem operations "gently". Please see details in the API specs below
for a more precise definition of "gently".

### Contributing

The npm team enthusiastically welcomes contributions and project participation!
There's a bunch of things you can do if you want to contribute! The [Contributor
Guide](CONTRIBUTING.md) has all the information you need for everything from
reporting bugs to contributing entire new features. Please don't hesitate to
jump in if you'd like to, or even ask us questions if something isn't clear.

### API

####  `> rm(target, opts, cb)`

Will delete all directories between `target` and `opts.base`, as long as they are empty.
That is, if `target` is `/a/b/c/d/e` and `base` is `/a/b`, but `/a/b/c` has other files
besides the `d` directory inside of it, `/a/b/c` will remain.

##### Example

```javascript
rm(target, opts, cb)
```

####  `> link(from, to, opts, cb)`

If `from` is a real directory, and `from` is not the same directory as `to`, will
symlink `from` to `to`, while also gently [`rm`](#rm)ing the `to` directory,
and then call the callback. Otherwise, will call callback with an `Error`.

##### Example

```javascript
link(from, to, opts, cb)
```

####  `> linkIfExists(from, to, opts, cb)`

Performs the same operation as [`link`](#link), except does nothing when `from` is the
same as `to`, and calls the callback.

##### Example

```javascript
linkIfExists(from, to, opts, cb)
```
