Search code examples
gitbashshellbackup

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


I have a lot of untracked files. I am pretty sure that most of them I can delete, however... you know, backup could be helpful ;)

What you are doing in similar situation?


Solution

  • 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.