Archive for the ‘Net: Techy: Linux’ category

Argument list too long when using rm ?

August 6th, 2006

Ever needed to delete a lot (and I mean several thousand) files from a directory in Linux? Then you may have encountered the “Argument list too long” error message which occurs when using “rm *” on the folder. This problem occurs because the list of files exceeds the 128K buffer which the kernel uses to pass the list of files to rm .

So how to defeat this problem?

Simple, use:
find . -name "*" -print | xargs rm
or, if you just want to delete the files starting “unwantedMail”, then use:
find . -name "unwantedMail*" -print | xargs rm

Techy: Recursive Find and Grep

November 18th, 2003

Here’s another little Linux “script snippet” I’ve needed over the past few days: basically, give it a directory/folder and it’ll search all the files in that directory for a set word, words, phrase (or even a string of characters). Very handy if you can tell that a server obviously knows about the domain, but try as you might – you can’t figure out which site the domain name belongs to (as it’s an add on domain and the dratted Ensim control panel won’t allow you to show it). Quick search on the Apache configuration folder and bingo!

I’m entering it here so a) if anybody else needs it, they can easily find it by searching for things such as “grep”, “recursive”, “search”, “linux”, “files” and “find”, and b) so I don’t have to bother remembering the syntax myself 😉

find [start folder name] -type f -exec grep ‘[text you are searching for]’ {} \; -print

Quick explanation:

  • “find XXX”: search the following folder(s)
  • “-type f”: for file(s)
  • “-exec”: then run the following command:
  • “grep ‘search text’ {} \;” use the grep function to search the file for the text
  • “-print” and then display the file name and details

Techy: Recursive CHMOD of Folders

November 12th, 2003

I’m currently in the midst of moving a large number of websites from one Red Hat Linux web server (an Ensim machine) to another Red Hat Linux web server (this one powered by Cpanel) , but the chmod (file permissions) of the “public_html” (web root, web docs, htdocs whatever) folder is incorrect on the new server. So, instead of chmodding over 200 files “by hand”, I’ve used the following little script (just run from the command line):

find . -type d -name public_html -exec chmod 0755 {} \;

Basically it searches (using find recursively (ie it checks folders and sub folders/directories and sub directories) for a directory (-type d) called (-name) public_html and when it does it runs the command (-exec) chmod 0755 (which sets the permissions so that the owner can read, write and execute/open the folder and all other users can read and execute/open the folder).

Simple eh? 😉

Techy: Single Line Multiple File Search And Replace

May 12th, 2003

Whilst performing the server upgrades, Ensim Pro died and crashed the server forcing us to roll back to plain old Ensim on the Red Hat Linux box. After we had done that, we then had to restore all the customer data and I noticed a slight inconsistency in the data: for some reason, all the backup files had the wrong IP address stored in them! So after the backups were restored, I found the Apache virtual conf folder (/etc/httpd/conf/virtual) and executed the following command at the Linux shell prompt (as root):

/usr/bin/perl -pi -e ‘s/old_IP_address/new_IP_address/g’ *

This practically is a single line multiple file search and replace function and it works as follows:

  • usr/bin/perl start the Perl interpreter (the language this script is written in)
  • -p instruct perl to loop/repeat around the following instructions
  • i edit the specified files in place (i.e. alter the stated files)
  • -e “what follows is a single line command”
  • ‘s/old_IP_address/new_IP_address/g’ a Perl regular expression to subsitute the text old_IP_address with the text new_IP_address on a global basis (if you omit the ‘g’ it will only replace the first occurrence of the old_IP_address found in each file). Change to /gi for a global, case insensitive search if you require
  • * change files matching this wildcard (*=every file and extension: you could use “*.html” just to change files ending in .html if you wanted)

I hope this little script comes in handy to someone else, but I still wish that I hadn’t needed to work out how to do it 🙁

%d bloggers like this: