Please help me to figure out the logic for this problem


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Please help me to figure out the logic for this problem
# 1  
Old 02-04-2010
Please help me to figure out the logic for this problem

Hello,
i am on 2.6.13-1.1526_FC4smp
i have directory named /home , and in there i have directory 2009_10_10
and two files : 2009_10_10.log and 2009_10_11.log
How to write shell script which will delete only file/s that don't have his/their 'parent' directory, so in this case , only 2009_10_11.log would be deleted ?
Smilie
# 2  
Old 02-04-2010
Try this:

Code:
find /home -type f | awk -F[./] '$(NF-2)!=$(NF-1){system("ls " $(NF-1)"."$NF)}'

Replace the ls command with rm-f if the output is correct:

Code:
find /home -type f | awk -F[./] '$(NF-2)!=$(NF-1){system("rm -f " $(NF-1)"."$NF)}'

# 3  
Old 02-04-2010
thanks , but it's not working : (
look , this is a copy-paste of what i've did ,
note that directories that are in the /u02/oradata/arch/flash/RING10/backupset , are not empty, so i guess some output of the ls command is
from the content of those directories:

Code:
[oracle@dell backupset]$ pwd
/u02/oradata/arch/flash/RING10/backupset
[oracle@dell backupset]$ ls -l
total 36
-rw-r--r--  1 oracle oinstall 6407 Jan 29 07:15 2010_01_29.log
-rw-r--r--  1 oracle oinstall 4102 Feb  2 07:15 2010_02_02.log
drwxr-x---  2 oracle oinstall 4096 Feb  4 14:02 2010_02_03
-rw-r--r--  1 oracle oinstall 3923 Feb  3 07:15 2010_02_03.log
drwxr-x---  2 oracle oinstall 4096 Feb  4 14:01 2010_02_04
-rw-r--r--  1 oracle oinstall 4667 Feb  4 14:02 2010_02_04.log
[oracle@dell backupset]$
[oracle@dell backupset]$ find /u02/oradata/arch/flash/RING10/backupset -type f | awk -F[./] '$(NF-2)!=$(NF-1){system("ls " $(NF-1)"."$NF)}'
2010_02_02.log
2010_01_29.log
ls: o1_mf_annnn_TAG20100204T071355_5pnsf51k_.bkp: No such file or directory
ls: o1_mf_annnn_TAG20100204T140154_5pokb3k8_.bkp: No such file or directory
ls: o1_mf_nnndf_TAG20100204T070029_5pnrmxpp_.bkp: No such file or directory
ls: o1_mf_annnn_TAG20100204T070012_5pnrmfvd_.bkp: No such file or directory
ls: o1_mf_annnn_TAG20100204T134643_5pojfo2k_.bkp: No such file or directory
ls: o1_mf_nnndf_TAG20100204T134648_5pojfrlt_.bkp: No such file or directory
2010_02_04.log
2010_02_03.log
ls: o1_mf_annnn_TAG20100203T071451_5pl52w9m_.bkp: No such file or directory
ls: o1_mf_nnndf_TAG20100203T070044_5pl48fq1_.bkp: No such file or directory
[oracle@dell backupset]$

In this case, i would need to have deleted 2010_02_02.log and 2010_01_29.log , as they don't have their directory.
# 4  
Old 02-04-2010
I've missed something...try this one (not tested):

Code:
ls -l | sort -r | 
awk -F[./] 'NR==1{next} /^d/{a[$NF];next} !($(NF-1) in a){system("ls " $(NF-1)"."$NF)}'


Replace the ls command with rm-f if the output is correct.

Last edited by Franklin52; 02-04-2010 at 11:13 AM.. Reason: Forgot closing brace
# 5  
Old 02-04-2010
i am getting some error ...

Code:
[oracle@dell backupset]$ ls -l | sort -r | awk -F[./] 'NR==1{next} /^d/{a[$NF];next} !($(NF-1) in a){system("ls " $(NF-1)"."$NF)'
awk: cmd. line:1: NR==1{next} /^d/{a[$NF];next} !($(NF-1) in a){system("ls " $(NF-1)"."$NF)
awk: cmd. line:1:                                                                          ^ unexpected newline or end of string

# 6  
Old 02-04-2010
Sorry, I forgot a closing brace. I've edited the code.
# 7  
Old 02-04-2010
This will work also (obviously not as short written as Franklin52's solution):

Code:
#!/bin/bash

#TARGET dir should end with /, as in /home/user/

TARGET="/your/dir/"
TEMP="/path/to/a/temporary/file"

ls -l $TARGET | grep ^d | awk '{print $8}' > $TEMP

ls $TARGET | grep -v -f $TEMP | awk -v TARGET="$TARGET" '{print TARGET$0}' | xargs ls -lrta

Login or Register to Ask a Question

Previous Thread | Next Thread

4 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help with change significant figure to normal figure command

Hi, Below is my input file: Long list of significant figure 1.757E-4 7.51E-3 5.634E-5 . . . Desired output file: 0.0001757 0.00751 0.00005634 . . . (10 Replies)
Discussion started by: perl_beginner
10 Replies

2. Shell Programming and Scripting

Nawk if logic problem

nawk '{ fmt="%3s %22s %48s %35s %21s\n"; if ($3==$6 && $1=="STOPLOSS") { tpy="Successful Match"; jnme=$1; sts="File will be loaded"; cntrl=$3; audit=$6; printf (fmt, tpy,jnme,sts,cntrl,audit) >> "'${AUDIT_DATA_FILE}/${AUDIT36}'" }else if ($3!=$6 && $1=="STOPLOSS") { tpy="Mis-Match ";... (4 Replies)
Discussion started by: wawa
4 Replies

3. UNIX for Dummies Questions & Answers

if then else logic with while loop problem

Hi Friends, I have to do write a shell file based on one flag.If that flag value is 'N' then process look in $DATA are and the normal process continue.If vaule is 'P' then it check for the files in different location $CONV and move those file in $DATA area and rest of the process... (2 Replies)
Discussion started by: Param0073
2 Replies

4. Shell Programming and Scripting

Problem with if logic

Hi there, In my shell program I have two if statements the first one checks that the date in yyyymm format is equal to a date from the parameter file in yyyymm format, and that the file and sends an appropiate email The second one checks that the date in yyyymm format is equal to a... (1 Reply)
Discussion started by: rjsha1
1 Replies
Login or Register to Ask a Question