remove spaces via bash

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
I realized bash expansion would work here.

Using for loop

for x in {a..b}
do
    echo $x*
done
Notice 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/
done
sometimes 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/
done
this 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/
done
You 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.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *