Difference between revisions of "Sample Scripts"

From rbachwiki
Jump to navigation Jump to search
Line 215: Line 215:
== Find specific files and copy them to another folder ==
== Find specific files and copy them to another folder ==
  find -type f -name "*app1*" -exec cp {} /var/www/test/ \;
  find -type f -name "*app1*" -exec cp {} /var/www/test/ \;
== Using rename command ==
'''If its not installed in MacOS, use brew to install it'''
rename 's/dem/rob/g' * jpg
Will change dem and replace it with rob /g is global which will replace all occurrence of dem in the file name


== Find files x days old and delete them==
== Find files x days old and delete them==

Revision as of 21:21, 15 November 2019

Script using if

 #!/bin/bash
echo -e "This program adds entries to a family database file . \n"
echo -e "Would you like to add an entry to the family database file? \n"
read ANSWER1
if [ $ANSWER1 = "y" -o $ANSWER1 = "Y" ]
then
echo -e "Please enter the name of the family member --> \c"
read NAME
echo -e "Please enter the family menber's relation to you (i.e. mother) -->\c"
read RELATION
echo -e "Please enter the family member's telephone number -->\c"
read PHONE
echo -e "$NAME\t$RELATION\t$PHONE">>database
fi
echo -e "Would you like to search an entry in the family databae file?\n"
read ANSWER2
if [ $ANSWER2="y" -o $ANSWER2="Y" ]
then
echo -e "What word would you like to look for? -->\c"
read WORD
grep "$WORD" database
fi

Script using CASE

#!/bin/bash
while true
do
clear
echo -e "What would you like to do?
Add and entry (a)
Search an entry (s)
Quit (q)
Enter your choice (a/s/q)-->\c"
read ANSWER
case $ANSWER in
a|A) echo -e "Please enter the name of the family member -->\c"
read NAME
echo -e "Please enter the family member's relation to you (i.e. mother) -->\c"
read RELATION
echo -e "Please enter the family member's telephone number -->\c"
read PHONE
echo -e "$NAME\t$RELATION\t$PHONE" >>database
;;
s|S) echo -e "What word would you like to look for?-->\c"
read WORD
grep "$WORD" database
sleep 4
;;
q|Q) exit
;;
*) echo "You must enter either the letter a or s"
sleep 4
;;
esac
done

While Loop

#!/bin/bash
index=1
while [ $index -lt 6 ]
do
echo "hello ${index}"
((index++))
done


while [ "$correct" != "y" ]
do
        read -p "enter your name:" name
        read -p "is ${name} matched" correct
done

Files in folder to html

echo "print directory conents to file"
echo -e "what is the title---->\c"
read title
sleep 1
echo -e '<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>' > index.html
sleep 2
echo -e $title >> index.html
sleep 2
echo '</title>' >> index.html
sleep 2
echo -e '</head>
<body>' >> index.html
sleep 2
echo '<h1>' >> index.html
sleep 2
echo $title >> index.html
sleep 2
echo '</h1>' >> index.html
sleep 2
ls | awk -F: '{print "<p> <a href=\""$1  "\">"$1 "</a></p>"}' >> index.html
sleep 2
echo -e '</body></html' >> index.html

Reading a file, line by line

read -p "Enter Filename " FILENAME
grep [rR]obert $FILENAME | while read LINE
do
echo "<p> ${LINE}</p>"
done

Send Find and replace to a separate file

read -p "Enter Filename " FILENAME
sed 's/[rR]obert'xor/g' > two.txt
sleep 2
#clear output file
echo " Cleaned file " > three.txt
grep -n -i xor two.txt | while read LINE
do
echo "<p> ${LINE} </p>" >> three.txt
done
clear
echo "--------- two.txt -------------"
cat two.txt
echo ""
echo "------three.txt ----------------"
cat three.txt

Backup MYSQL Database

#!/bin/bash
mdate=`date +%F`
echo "================ backing up databasename database =============="
mysqldump -u username -ppassword databasename > databasename-$mdate.sql
sleep 5
echo "================ backing up databasename ===================="
mysqldump -u username -ppassword databasename > databasename-$mdate.sql
sleep 5
echo  "=============== Backing up databasename database ============="
mysqldump -u username -ppassword databasename > databasename-$mdate.sql
sleep 5
echo " ========= done ========="
ls  *.sql > /var/www/sqlfiles.txt
sleep 5
# calls another script which does the actual backup to amazon
cd /var/dirtoscripts/
./bksql.sh

Backup HTML Directory

#!/bin/bash
bkdate = `date +%F`
cd /var/www/
sleep 1
filename=outwaterphotogallery-$bkdate.zip
#zip html folder
zip -r $filename /var/www/html
sleep 5
if [ "$filename" ]; then
aws s3 cp --region us-east-1 $filename s3://websitebackup-opi/web/
fi
sleep 4
count=`ls -l *.zip | wc -l 2> /dev/null`
if [ $count -ge 1 ]; then
mv *.zip /var/www/backups/web/
fi


Script that backs up to Amazon S3

#!/bin/bash
echo "--------- backing up to s3 --------------"
set -e
if [ -f sqlfiles.txt ]; then
while read line
do
aws s3 cp --region us-east-1  $line s3://bucketname
done < sqlfiles.txt

echo "++++++++++= Done  =+++++++++++++++"
else
echo " XXXXXXXXXXX  File Does not exist XXXXXXX"
fi
cd /var/www/dirtoscripts/
# call script that counts the num of sql files in dir and move them to an archive folder
./cleanupscript

Find files and rsync them to a dir

find . -type f -name '*.jpg' -exec rsync -zavhP {} /dirctorytocopyto/ \;

Find Multiple filenames

find . -type f \( -name "*.nef" -o -name "*.jpg" -o -name "*.tif" \)

RSYNC copy directories with spaces

find . -type f -name '*177*' -exec rsync -zavP {} "/var/tmp/my dir" \;

Count Files in Directory

cd /var/www/

count=`ls-l *.sh | wc -l 2> /dev/null`
if [ $count -ge 1 ]; then
mv *.sql /var/www/backups/dirname
fi

Find and delete files with certain names

find -type -f -name '*one*' -exec rm {} \;

Find specific files and copy them to another folder

find -type f -name "*app1*" -exec cp {} /var/www/test/ \;

Using rename command

If its not installed in MacOS, use brew to install it

rename 's/dem/rob/g' * jpg

Will change dem and replace it with rob /g is global which will replace all occurrence of dem in the file name

Find files x days old and delete them

#!/bin/bash
find /path/to/files/ -type f -name '*.jpg' -mtime +10 -exec mv {} /path/to/archive/ \;
find /path/to/archive/ -type f -name '*.jpg' -mtime +30 -exec rm {} \;
  • First part is the path where your files are located. Don’t use wildcard * if you have a lot of files because you will get Argument list too long error.
  • Second part -type is the file type f stands for files
  • Third part -name is limiting *,jpg files
  • Fourth part -mtime gets how many days the files older than will be listed. +30 is for files older then 30 days.
  • Fifth part -exec executes a command. In this case mv is the command, {} gets the filelist, path where to move the files and \; closes the command

Find files over a certain size

$ find . -type f -size -4G

You can use size switch for other formats, such as

  • `c’ for bytes
  • ‘w’ for two-byte words
  • `k’ for Kilobytes
  • `M’ for Megabytes
  • `G’ for Gigabytes

Find Directory sizes

du -h --max-depth=2 | sort -hr