Recursively add files by pattern
How do I recursively add files by a pattern (or glob) located in different directories?
For example, I'd like to add A/B/C/foo.java
and D/E/F/bar.java
(and several other java files) with one command:
git add '*.java'
Unfortunately, that doesn't work as expected.
You can use git add [path]/\*.java
to add java files from subdirectories,
e.g. git add ./\*.java
for current directory.
From git add
documentation:
Adds content from all
*.txt
files underDocumentation
directory and its subdirectories:$ git add Documentation/\*.txt
Note that the asterisk
*
is quoted from the shell in this example; this lets the command include the files from subdirectories ofDocumentation/
directory.
Sergio Acosta's answer is probably your best bet if some of the files to be added may not already be tracked. If you want to limit yourself to files git already knows about, you could combine git-ls-files
with a filter:
git ls-files [path] | grep '\.java$' | xargs git add
Git doesn't provide any fancy mechanisms for doing this itself, as it's basically a shell problem: how do you get a list of files to provide as arguments to a given command.