I’m sure this must be possible, but I’m not sure how. What I’m trying to do is loop through a directory, looking for numeric directories within, and get their disk space. This is what I’ve come up with, but it’s not dealing with the regex.
FILES="$DIR_PATH/secure/{[0-9]+}" for f in $FILES do used=`du -s $f` base=`basename $f` mysql --user=$DB_USER --password=$DB_PASS --host=$DB_HOST $DB_NAME << EOF INSERT INTO disk_usage(site_id, filesystem, used, size) VALUES("$base", "Private Files", "$used", "$size") EOF done
In case it’s not clear, I have a directory containing a bunch of directories with numeric names. This directory also contains some other files/directories that I don’t want to calculate disk space on. So I just want to loop through the directory and get the disk space used by each numeric subdirectory. I’m sure this isn’t optimal code, but it’s being run privately on a safe filesystem, so the risk of problems is pretty low, but if there is a way to improve it, please let me know.
Advertisement
Answer
Using bash’s extended patterns
shopt -s extglob for subdir in "$DIR_PATH"/secure/+([[:digit:]])/ # ...............................^^-----------^ ...
Note the trailing slash: that limits the results to directories only, ignoring files named with all digits.