Skip to main content

linkins -- Safely link directory structures

Project description


linkins is a command line tool which allows users to link a directory structure. It provides the ability to execute user-defined scripts at each level of the directory hierarchy.


Install using pip:

pip install pyusps

or easy_install:

easy_install pyusps


The linkins command takes two positional arguments: the directory which has the files to link and the destination directory. These show up in the help messages as TARGET_DIR and LINK_DIR, respectively:


It also supports a number of optional arguments. To see all the supported options you can invoke the help menu:

linkins --help

Running scripts

Scripts are not run be default. In order to run your scripts you must pass the -r or –run option.

Linkins can run custom scripts at each directory. The only requirement is that the script name be the same everywhere. By default, linkins looks for scripts named linkins-script. But, the script name can be changed with the –script option. An example of a TARGET_DIR with scripts would be:

|-- .bashrc
|-- .emacs
|-- linkins-script
|-- .emacs.d
|   |-- linkins-script
|   |-- wc.el
|-- .xmonad
|   |-- xmonad.hs

Scripts must be executable. In Linux that means the executable bit must be set:

chmod +x SCRIPT_NAME

Scripts are not linked or copied to LINK_DIR. Instead, and for convenience, linkins passes three positional arguments to the script: TARGET_DIR, LINK_DIR and a relative path from TARGET_DIR to the script’s parent directory. All paths are absolute except for the last positional argument just described. This includes the script itself. For example, the two scripts in the example above would be called like:

TARGET_DIR/.emacs.d/linkins-script TARGET_DIR LINKS_DIR .emacs.d

If the directory which mirrors the script’s parent directory in the LINK_DIR side does not exist linkdirs will create it.

Any files in the same directory as the script are always linked before the script is run.


You can run each script as a separate process by using the -m or –multiprocess option. However, you must be aware of the consequences. For example, if you have two scripts that install packages from apt-get one of them will likely fail because it will not be able to obtain the dpkg lock.


A script’s output is redirected to linkins’ log and is logged at level INFO. A script log line has the following form:


where SCRIPT is the relative path from TARGET_DIR to the script, STREAM is one of STDOUT or STDERR (depending on the stream the script outputted to) and MSG is the message outputted by the script.

If the -q option is used the script’s output will be not be shown.


External dependencies

  • python-dev
  • python-setuptools
  • python-virtualenv


To start developing run the following commands from the project’s base directory. You can download the source from

# I like to install the virtual environment in a hidden repo.
virtualenv .virtual
# I leave the magic to Ruby developers (.virtual/bin/activate)
.virtual/bin/python develop
# At this point, linkins will already be in easy-install.pth.
# So, pip will not attempt to download it
.virtual/bin/pip install linkins[test]

If you like to use ipython you can install it with the dev requirement:

.virtual/bin/pip install linkins[dev]


To run the unit-tests run the following command from the project’s base directory:


Project details

Release history Release notifications

History Node

History Node

History Node

History Node

History Node

History Node

This version
History Node


History Node


History Node


History Node


History Node


History Node


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
linkins-0.0.6.tar.gz (11.0 kB) Copy SHA256 hash SHA256 Source None Nov 2, 2012

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page