How to make quick backup of untracked files which I want to delete by git clean?

Generally if they are ever going to be useful, then you should be checking them in! If you don't need them right now, then check them in and remove them! IE, track them as deleted files. That way you can always recover them later if you decide you do need them.

Remember, a fundamental rule of using a version control system is "track everything". Small changes, broken changes (in a branch), etc. You never know when you might need those files or changes again, so use your VC system to make sure you can't lose them.


The following command will create a tar archive in your home directory of all of the untracked (and not ignored) files in your directory:

git ls-files --others --exclude-standard -z | xargs -0 tar rvf ~/backup-untracked.tar

If you're going to use this technique, check carefully that git ls-files --others --exclude-standard on its own produces the list of files you expect!

A few notes on this solution might be in order:

  • I've used -z to get git ls-files to output the list of files with NUL (a zero byte) as the separator between files, and the -0 parameter to xargs tells it to consider NUL to be the separator between the parameters it reads from standard input. This is a standard trick to deal with the possibility that a filename might contain a newline, since the only two bytes that aren't allowed in filenames on Linux are NUL and /.

  • If you have a huge number of untracked files then xargs will run the tar command more than once, so it's important that I've told tar to append files (r) rather than create a new archive (c), otherwise the later invocations of tar will overwrite the archive created just before.