Determine if a file is binary using GIT
Sometimes it's nice to know if a file is a binary file or a text file from the command line (Such as when building an api to display files stored in a git repository).
The command is as follows:
git diff 4b825dc642cb6eb9a060e54bf8d69288fbee4904 --numstat GIT_REF -- FILEPATH
Revision 4b825dc642cb6eb9a060e54bf8d69288fbee4904
is a special git sha that points to an empty commit.
A text file will output:
git diff 4b825dc642cb6eb9a060e54bf8d69288fbee4904 --numstat HEAD -- package.json
34 0 package.json
A binary file will output
git diff 4b825dc642cb6eb9a060e54bf8d69288fbee4904 --numstat HEAD -- logo.png
- - logo.png
The output returns a tab separated list which can be piped to | cut -f1
. The first column is the number of lines in
the file at revision GIT_REF
. If it is a binary file it will return -
.
This check can also be performed without git, but will only work on files that are currently on the filesystem using the
file
command in bash.
A text file will output:
file --mime package.json
package.json: text/plain; charset=us-ascii
A binary file will output
file --mime logo.png
logo.png: image/png; charset=binary