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.