identifies the file the patch should be applied to. If not, you can specify the file on the command line: atch foo.txt &lt; bar.patch Applying patches to entire directories (perhaps the more common case) is similar, but you have to be careful about setting a "p level". What this means is that, within patch files, the files to be patched are identified by path names which may be different now that the files are located on your computer rather than on the computer where the patch was created. The p level instructs patch to ignore parts of the path name so that it can identify the files correctly. Most often a p level of one will work, so you use: atch -p1 &lt; baz.patch You should change to the top level source directory before running this command. If a patch level of one does not correctly identify any files to patch, inspect the patch file for file names. If you see a name like /users/stephen/package/src/net/http.c and you are working in a directory that contains net/http.c, use atch -p5 &lt; baz.patch In general, count up one for each path separator (slash character) that you remove from the beginning of the path, until what's left is a path that exists in your working directory. The count you reach is the p level. To remove a patch, use the -R flag, ie atch -p5 -R &lt; baz.patch Creating patches with diff Using diff is simple whether you are working with single files or