Saturday, February 6, 2010

How to recursively go through all local or remote directories

Taken From: http://www.cyberciti.biz/tips/linux-recurse-through-local-remote-directories.html

You can use find command or recursdir command to recurse through local or remote directories to command/find files or create tar files.

recursdir command pass a C script to recursively perform operations on files. recursdir is an excellent tool for automatic stuff. It provides C style programming functions and statements such as:

* strncmp()
* exec()
* system()
* strstr()
* strcat()
* printf()
* popen()
* if ( expr ) { take-action }
* if ( expr ) { take-action } else { do-something-else; }
* /* comments */
* Detecting file types and macros
* All of the logical, arithmetic and bitwise C operators are supported. These are ( ) >= <= > < != == && || ! - + * / % & ^ and have the same meanings and precedences as in C. etc.

Install recursdir

recursdir is part of mirrordir package:
$ sudo apt-get install mirrordir
Recursively find file and take action

For example find out all *.bak file and delete them, using find command:
find /path/to/dir -iname "*bak" -exec rm {} \;
Following is a fast and overkill equivalent of find, using recursdir :
recursdir /path/to/dir -C 'exec("/bin/rm","-f",PATH);'

Find and print out all the *.CPP (C++) files on your system, enter (note usage of if and printf() C like syntax):
recursdir /path/to/dir -C 'if (!glob ("*.cpp", FILE)) printf ("%s\n", PATH);'
or
find /path/to/dir -iname "*.cpp"
Backup a remote ftp site to local tape:

This is my favorite command to mirror remote ftp tree:
recursdir ftp://user-name@ftp.server.nixcraft.in/ --tar-file /dev/mt
Write complex directory manipulation scripts

You can write complex scripts using recursdir. For example, following will removes all core files from your Linux 32 bit system:

recursdir / -C '
long l;
/* look for /proc */
if (strncmp (PATH, "/proc", 5)) {
if (S_ISREG (stat.st_mode) && !strcmp ("core", FILE)) {
if (strstr (popen ("file " + PATH), "ELF 32-bit LSB core")) {
l = l + stat.st_size;
printf ("removing: %s, cumu. total = %ldkB\n", PATH, l >> 10);
exec ("rm", "-f", PATH);
}
}
}'

recursdir offers many more advanced options such as encryption, backups compression and many more, please refer the man page for more information.

in reference to:

"How to recursively go through all local or remote directories"
- How to recursively go through all local or remote directories (view on Google Sidewiki)

No comments: