Comparing files in a directory against an array of files


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Comparing files in a directory against an array of files
# 1  
Old 03-30-2013
Question Comparing files in a directory against an array of files

I hope I can explain this correctly. I am using Bash-4.2 for my shell.

I have a group of file names held in an array. I want to compare the names in this array against the names of files currently present in a directory. If the file does not exist in the directory, that is not a problem. However, if any file exists in the directory that is not also listed in the array, the file in the directory should be deleted. I just cannot find a relatively simple way to do this.
# 2  
Old 03-30-2013
so, where are you stuck with your code? are you getting any error?

--ahamed
# 3  
Old 03-30-2013
I have tried literally dozens of ways to do it, and while I have certainly found a few that work, they are all to inflated in my opinion. I am just trying to find an eloquent method if possible.
# 4  
Old 03-30-2013
This would be a lot easier in a language with associative arrays; you could check if the file was in the set in one operation instead of a loop.

Code:
KEEP=( file1 file2 file3 )

for FILE in *
do
        DEL=1
        for X in "${KEEP[@]}"
        do
                [ "$X" = "$FILE" ] && DEL=0
        done

        [ "$DEL" -eq 1 ] && echo rm "$FILE"
done

Remove the echo once you've tested and are sure this does what you want.
This User Gave Thanks to Corona688 For This Post:
# 5  
Old 03-31-2013
Bash 4x supports associative arrays I believe; however, I have no experience with them. I just use the regular arrays. If you could give me an example of how this would work with an associative array, I might learn something.

Thanks!
# 6  
Old 03-31-2013
With assosciative arrays in bash4 you could try something like this:
Code:
declare -A KEEP=( [file1]=1 [file2]=1 [file3]=1 )
for file in *
do 
  if [[ ! ${KEEP[$file]} ]]; then
    echo rm "$file"
  fi
done

Remove the echo once you have tested it and it does what you want..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Comparing two files and list the difference with common first line content of both files

I have two file as given below which shows the ACL permissions of each file. I need to compare the source file with target file and list down the difference as specified below in required output. Can someone help me on this ? Source File ************* # file: /local/test_1 # owner: own #... (4 Replies)
Discussion started by: sarathy_a35
4 Replies

2. Shell Programming and Scripting

Directory containing files,Print names of the files in the directory that are exactly same content.

Given a directory containing say a few thousand files, please output a list of all the names of the files in the directory that are exactly the same, i.e. have the same contents. func(a_directory_name) output -> {“matches”: , ... ]} e.g. func(“/home/my/files”) where the directory... (7 Replies)
Discussion started by: anuragpgtgerman
7 Replies

3. Shell Programming and Scripting

Need Help with Bash - comparing directory contents with list of files

Hey guys, need help with a script I'm trying to write. Basically I need to compare the contents of a folder called "profiles" with a list of files called "template". when the file matches the contents of the folder it needs to set a variable called "checked" to "1" Cookies to anyone... (4 Replies)
Discussion started by: Scriporium
4 Replies

4. UNIX for Advanced & Expert Users

How to find duplicates contents in a files by comparing other files?

Hi Guys , we have one directory ...in that directory all files will be set on each day.. files must have header ,contents ,footer.. i wants to compare the header,contents,footer ..if its same means display an error message as 'files contents same' (7 Replies)
Discussion started by: Venkatesh1
7 Replies

5. Shell Programming and Scripting

Grepping file names, comparing them to a directory of files, and moving them into a new directory

got it figured out :) (1 Reply)
Discussion started by: sHockz
1 Replies

6. Shell Programming and Scripting

Comparing the matches in two files using awk when both files have their own field separators

I've two files with data like below: file1.txt: AAA,Apples,123 BBB,Bananas,124 CCC,Carrot,125 file2.txt: Store1|AAA|123|11 Store2|BBB|124|23 Store3|CCC|125|57 Store4|DDD|126|38 So,the field separator in file1.txt is a comma and in file2.txt,it is | Now,the output should be... (2 Replies)
Discussion started by: asyed
2 Replies

7. Shell Programming and Scripting

Comparing files names in directory over two servers

Hi folks I need to write a shell script to check whether source and the destination has the same files. The source and destination are over two servers and connecting through ssh. It should even compare the date i.e, the complete file name, date stamp and size should match. Should list out all the... (3 Replies)
Discussion started by: Olivia
3 Replies

8. Shell Programming and Scripting

How to store files names from a directory to an array

Hi I want to store the file names into an array. I have written like this but I am getting error. declare -A arr_Filenames ls -l *.log | set -A arr_Filenames $(awk '{print $9}') index=0 while (( $index < ${#arr_Filenames })); do Current_Filename=${arr_Filenames} ... (5 Replies)
Discussion started by: dgmm
5 Replies

9. Shell Programming and Scripting

Need help comparing two files and deleting some things in those files!

So I have two files: File1 pictures.txt 1.1 1.3 dance.txt 1.2 1.4 treehouse.txt 1.3 1.5 File2 pictures.txt 1.5 ref2313 1.4 ref2345 1.3 ref5432 1.2 ref4244 dance.txt 1.6 ref2342 1.5 ref2352 1.4 ref0695 1.3 ref5738 1.2 ref4948 1.1 treehouse.txt 1.6 ref8573 1.5 ref3284 1.4 ref5838... (24 Replies)
Discussion started by: linuxkid
24 Replies

10. UNIX for Advanced & Expert Users

comparing shadow files with real files

Hi I need to compare shadow file sizes with their real file counterparts. If the shadow file size differs form the realfile size then it must send a mail. My problem is that our system has over 1600 shadowfiles in different directories, with different names. the only consistancy is the .sh file... (4 Replies)
Discussion started by: terrym
4 Replies
Login or Register to Ask a Question