Compare files in two folders and delete missing ones


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Compare files in two folders and delete missing ones
# 1  
Old 03-03-2010
CPU & Memory Compare files in two folders and delete missing ones

I do not know much about shell scripting so I am at a loss here. If someone can help me, that would be great!

I have two directories

/dir1

/dir2

I need to delete all files from /dir1 and that does not have a correspondent file in /dir2. It should NOT check file suffixes in /dir2 . Why? Because in /dir2 i have .torrent files and in /dir1 I have the correspondent source file.

ex: (will all present files in both directories)
/dir1/openbsd4_6.iso
/dir1/openbsd4_1.iso
/dir1/freebsd7i386.iso
/dir1/freebsd7amd64.iso

/dir2/openbsd4_6.iso.torrent
/dir2/freebsd7amd64.iso.torrent

In this case /dir1/openbsd4_1.iso and /dir1/freebsd7i386.iso should be removed (from /dir1).

Thanks in advance if you can help.
# 2  
Old 03-03-2010
Try something like this:

Code:
while read file
do
  if [ ! -e /dir2/${file}.torrent ]
  then
    rm ${file}		# try this first with ls instead of rm
  fi
done < *.iso

# 3  
Old 03-03-2010
Replace the echo statement with remove statment below

as
Code:
rm $file

Code:
#!/bin/sh

for file in dir1/*
do
filestr=`basename $file`
if [ `ls dir2 | grep -c $filestr` -eq 0 ]; then
echo "$file not exists in dir2"
fi
done

cheers,
Devaraj Takhellambam
# 4  
Old 03-03-2010
You use the following script to do remove the files from dir1 which files are existing in dir2.

Code:
j=0
for i in `ls dir1 `
do
arr[$j]=$i
let j+=1
done
for i in `ls dir2`
do
if [[ -f dir2/$i ]];then
file=`echo $i | cut -d '.' -f 1-2`
for((k=0;k<${#arr[@]};k++))
do
if [[ ${arr[$k]} == $file ]]
then
rm dir1/$file
fi
done
fi
done

# 5  
Old 03-03-2010
Code:
for line in `ls -l . | sed "1d" |tr -s ' '|cut -d' ' -f 9`
do
        original_file_name=`echo $line`
        file_name=`echo $line | cut -d'.' -f 1`
#       echo $file_name
        for line in `ls -l ../04/ | sed "1d" |tr -s ' '|cut -d' ' -f 9`
        do
                file_name_in_another_dir=`echo $line | cut -d'.' -f 1`
#               echo $file_name_in_another_dir
                if [ $file_name == $file_name_in_another_dir ]
                then
                        echo "deleting file from ./$original_file_name"
                        rm "$original_file_name" >/dev/null
                fi
        done
done

Try the above bash script. This is also used to delete the files. At first it will compare all the files in the current directory
with the file names under the ../04 directory.

What are the file names are getting matched then it will delete those files from the current directory.
# 6  
Old 03-03-2010
Use diff command
Code:
diff dir1 dir2

it will give the filenames , you can use any parsing method and remove that
# 7  
Old 03-03-2010
Thanks for all your responses!
As I understand it it is not possible to a straight directory to directory comparisson since the file names are not identical (the suffixes and the last part of the filenames are different, .iso.torrent vs .iso).
Ex: /dir2/openbsd4_6.iso.torrent vs /dir1/openbsd4_6.iso

Which solutions take this into account? Also all files are not .iso. Some are .rar etc.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Script to compare files in 2 folders and delete the large file

Hello, my first thread here. I've been searching and fiddling around for about a week and I cannot find a solution.:confused: I have been converting all of my home videos to HEVC and sometimes the files end up smaller and sometimes they don't. I am currently comparing all the video files... (5 Replies)
Discussion started by: Josh52180
5 Replies

2. Shell Programming and Scripting

Script to compare partial filenames in two folders and delete duplicates

Background: I use a TV tuner card to capture OTA video files (.mpeg) and then my Plex Media Server automatically optimizes the files (transcodes for better playback) and places them in a new directory. I have another Plex Library pointing to the new location for the optimized .mp4 files. This... (2 Replies)
Discussion started by: shaky
2 Replies

3. Shell Programming and Scripting

Compare 2 files and find missing fields awk

Hello experts! I have 2 files. file1 is a list file containing uniquely names. e.g.: name1 number number name2 number number name5 number number name10 number number ... file2 is a data file arbitrary containing the names of file1 in paragraphs separated by "10" e.g. name4 ... (3 Replies)
Discussion started by: phaethon
3 Replies

4. Shell Programming and Scripting

Compare two files and get only missing names

I need to compare two files (oldfile1 & newfile). Need to ignore the values which are present in both files. At the same time, i need to get only records in new file. Tried using Join -v1 -v2 oldfile1 newfile (suspect it has not worked as expected). could anyone of you please help me here. (5 Replies)
Discussion started by: Selva_2507
5 Replies

5. Shell Programming and Scripting

Linux Script to compare two folders and copy missing files

Hi, I need help in shell scripting. If someone can help me, that would be great! Problem. I want Linux Script to compare two folders and copy missing files. Description. I have two directories /dir1 /dir2 I need to copy all distinct/new/unique/missing files from /dir1 and that... (1 Reply)
Discussion started by: S.Praveen Kumar
1 Replies

6. Shell Programming and Scripting

How to compare files in two folders using cmp?

i recently copied 400GB of data from a NTFS drive to a ext4 drive. I want to verify that the data is 100% identical to the original. I wanted to use cmp but it only does two files. The directory that was copied contains many subdirectories and all sorts of files (not just text). So I guess... (5 Replies)
Discussion started by: fuzzylogic25
5 Replies

7. Shell Programming and Scripting

Compare 2 folders to find several missing files among huge amounts of files.

Hi, all: I've got two folders, say, "folder1" and "folder2". Under each, there are thousands of files. It's quite obvious that there are some files missing in each. I just would like to find them. I believe this can be done by "diff" command. However, if I change the above question a... (1 Reply)
Discussion started by: jiapei100
1 Replies

8. UNIX for Dummies Questions & Answers

Delete folders and files in it - UNIX

I need to delete a folder and files in it of yesterdays and simply put this in cron. Folder name - "2010-03-2010" File name - "eprod_06_23.dmp" and "eprod_06_23.exp" Actually this folder and file is been created by a script which takes a backup of DB everyday.Thats why it creates folder and file... (3 Replies)
Discussion started by: j_panky
3 Replies

9. Shell Programming and Scripting

Compare the checksum of files in 2 different folders

Hi I have 2 different folders on different machines. they are supposed to be same but some time for unknown reason they are not. then we have to generate a report for files which are not matching. I was doing as below - cd folder1 find . -type f | sort | cksum >1.txt cd folder2 find .... (7 Replies)
Discussion started by: reldb
7 Replies

10. Shell Programming and Scripting

delete all folders/files and keep only the last 10 in a folder

Hi, I want to write a script that deletes all folders and keep the last 10 recent folders. I know the following: ls -ltr will sort the folders from old to recent. ls -ltr | awk '{print $9}' will list the folder names (with a blank line at the beginning) I want to get the 10th folder from... (3 Replies)
Discussion started by: melanie_pfefer
3 Replies
Login or Register to Ask a Question