In a previous post, I gave a command for doing a find and replace operation across multiple files in a directory.
I have used that command a number of times over the years but the problem with it is that it only works if all of the files you want to change are in the same directory.
I sometimes have need to perform this find and replace operation across files in different directories.
For this, you can use the find command and use xargs to run sed:
find . -name '*.txt' -print0 | xargs -0 sed -i 's|originaltext|replacementtext|g'
This command will find any files with the .txt extension, in the current directory or any directory below it and run it through sed to replace ‘originaltext’ with ‘replacementtext’.
To recursively chmod all files in the current directory (and sub-directories), you can do this:
find . -type d -exec chmod 755 {} \;
To do the same with just files, you can use:
find . -type f -exec chmod 644 {} \;
It’s really useful to not only be able to see the user and directory in your prompt but to have different colours for different users/servers – like a different colour for root or production boxes. Here is the code I use – just put it in a .profile in the users’s home directory (or in /etc/profile for globally):
# Set xterm title:
SHOSTNAME=`hostname -s`
PROMPT_COMMAND='if [ "${TERM}" = "xterm" -o "${TERM}" = "xterm-color" ];
then
if [ -n "${XTITLE}" ];
then
echo -ne "\033]0;${XTITLE}\007";
else
echo -ne "\033]0;[${USER}@${SHOSTNAME}:${PWD}]\007" | sed -e "s@${HOME}@\~@";
fi;
fi'
# Set Bash Prompt:
if [ "$BASH" ]; then
PS1='\[\033[1;36m\][\u@\h:\w]\$\[\033[0m\] '
# alias ls='ls --color'
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
export PS1 PROMPT_COMMAND SHOSTNAME
You can change the colours using the following codes:
# Black 0;30 Dark Gray 1;30
# Blue 0;34 Light Blue 1;34
# Green 0;32 Light Green 1;32
# Cyan 0;36 Light Cyan 1;36
# Red 0;31 Light Red 1;31
# Purple 0;35 Light Purple 1;35
# Brown 0;33 Yellow 1;33
# Light Gray 0;37 White 1;37
If you have a high load on your web server, it’s useful to be able to see a list of the current connections on port 80 as sometimes high load can be caused by someone abusing the site – for example scraping it or some kind of denial of service attack.
This code will show a list of the ip’s currently connected to your server on port 80 with a count of the number of connections to the left of it. It’s ordered by the number of connections – highest first:
netstat -ntulpa | grep :80 | awk '{print $5}' | cut -d: -f1 | sort -n | uniq -c | sort -n -r
Have you ever needed to change the same thing in a load of files and have had to sit there and go through each one in turn and make the same change?
This is a really useful and simple command:
perl -pi -w -e 's/from text/to text/g;' *
It simply goes through all files matching * and runs the regular expression, ‘s/from text/to text/g’ – which means replace all instances of “from text” with “to text”. nifty!