linux shell argument list too long rsync or cp
I needed to copy files generated by doxygen from one directory into another for a large opensource C++ project. Sadly there were too many files in the directory, so bash started complaining 🙁 cp and rsync died out with the error of argument list too long. initially I figured I could generate it all from scratch in new location but it was quicker and easier to use a for loop to rsync the files over 🙂
some info:
- all files start with alphabetic characters.
- there are no spaces in the names
- all files are in single directory
Using for loop
for x in {a..b} do echo $x* doneNotice I only stepped between A and B because I didn’t want to sit there for an hour while it listed all the files. this worked well, it listed all files and I was sure it would suite my purposes. now the real deal!
for x in {a..z} do echo $x rsync -az /backups/doxygen/$x* /home/user/current/directory/ donesometimes you might still get the error even for each letter, for example I still had too many files starting with D and Q. so I just changed where I globbed :
for x in {a..z} do echo $x rsync -az /backups/doxygen/d$x* /home/user/current/directory/ donethis allows me to further iterate a thru z but after starting the files with the letter d. Now what happens if you happen to have files starting with numbers? simply switch the letters for numbers.
for x in {0..9} do echo $x rsync -az /backups/doxygen/$x* /home/user/current/directory/ doneYou can use any other command you need in place of rsync. like mv cp mkdir or any custom commands.
for x in {a..z} do echo $x mv /backups/doxygen/$x* /home/user/current/directory/ done
Globbing
Now if you don’t want to use for loops you can glob them in a one liner like so :ls /backups/doxygen/[x-z]*and the actual command using cp and globbing
cp -r /backups/doxygen/[a-z]* /home/user/current/directory/and again going a level deeper
cp -r /backups/doxygen/d[a-z]* /home/user/current/directory/Voila! argument list too long is now vanquished! do any of you have a better way of dealing with this? let me know! More info about globbing.