The basic script in order to iterate recursively over sub-folders and merge all shapefiles into single one is:
#!/bin/bash consolidated_file="./consolidated.shp" for i in $(find . -name '*.shp'); do if [ ! -f "$consolidated_file" ]; then # first file - create the consolidated output file ogr2ogr -f "ESRI Shapefile" $consolidated_file $i else # update the output file with new file content ogr2ogr -f "ESRI Shapefile" -update -append $consolidated_file $i fi done
Hoverer in vertaully all examples around the web I noticed that for the case where I update the output file,
-nln tag is added, for example:
ogr2ogr -f "ESRI Shapefile" -update -append $consolidated_file $i -nln merged
According to the documentation it says:
Assign an alternate name to the new layer
And I noticed it creates a temporary shapefile called "merged", and in the end of the loop the file is identical to the last shapefile I merged.
I don't understand why I need this? Because I succeeded to merge successfully without this tag.