Sponsored Content
Top Forums UNIX for Advanced & Expert Users listing files excluding files from control file Post 302225251 by era on Friday 15th of August 2008 02:34:15 AM
Old 08-15-2008
Trivially, take out the -x option which requires the whole line to match, and add an -i option to make matching ignore case. However, that does not anchor searches to beginning of line, so e.g. a file named bestest will match the pattern test. Maybe you could accept a change to the control file format, to support full regular expressions? Then the control file should contain

Code:
^test
^send
^sfffile
^contl

It's possible to come up with a different workaround if this is not acceptable. If your needs are very specific, perhaps a small awk script would be best.

Code:
ls | awk 'NR==FNR { pat[++n] = "^" tolower($0); next; }
{ for (p in pat) if (tolower($0) ~ pat[p]) next; print }' ctlfile -

(With this script, you should keep the original control file.)

Last edited by era; 08-15-2008 at 03:44 AM.. Reason: Oops, mixing Perl and awk syntax
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Recursive directory listing without listing files

Does any one know how to get a recursive directory listing in long format (showing owner, group, permission etc) without listing the files contained in the directories. The following command also shows the files but I only want to see the directories. ls -lrtR * (4 Replies)
Discussion started by: psingh
4 Replies

2. Shell Programming and Scripting

search for files excluding binary files

Hi All, I need a solution on my following find command find ./.. -name '*.file' -print BTW This gives me the output as belows ./rtlsim/test/ADCONV0/infile/ad0_dagctst.file ./rtlsim/test/ADCONV0/user_command.file ./rtlsim/test/ADCONV0/simv.daidir/scsim.db.dir/scsim.db.file... (2 Replies)
Discussion started by: user_prady
2 Replies

3. Shell Programming and Scripting

perl script for listing files and mailing the all files

Hi, I am new to perl: I need to write perl script to list all the files present in directory and mail should be come to my inbox with all the files present in that directory. advanced thanks for valuable inputs. Thanks Prakash GR (1 Reply)
Discussion started by: prakash.gr
1 Replies

4. UNIX for Dummies Questions & Answers

Count number of files in directory excluding existing files

Hi, Please let me know how to find out number of files in a directory excluding existing files..The existing file format will be unknown..each time.. Thanks (3 Replies)
Discussion started by: ammu
3 Replies

5. UNIX for Dummies Questions & Answers

need to zip all the files excluding todays file

HI All, At present in my server the log folder was filled up and causing memory issue. So I am planning to write a script in such a way that the files which are older than 30 days will be deleted and also need to find the files which were not compressed and need to compress this file.... (4 Replies)
Discussion started by: arumilli
4 Replies

6. UNIX for Dummies Questions & Answers

Listing files without specific expression in the file

I am running Ubuntu 11.10 I have the following files. geo2503r05690585.html geo2503r06020612.html geo2503r06250641.html geo2503r06490658.html geo2503r06830686.html geo2503r05860601.html geo2503r06130624.html geo2503r06420648.html geo2503r06590682.html ... (4 Replies)
Discussion started by: kristinu
4 Replies

7. Shell Programming and Scripting

Copying files excluding some files

Hi, I have a folder which contains files in this format. abc-bin.000001 abc-bin.000002 abc-bin.000003 abc-bin.000004 abc-bin.000005 abc-bin.000006 abc-bin.000007 abc-bin.000008 abc-bin.000009 abc-bin.000010 abc-bin.index I want to copy all the files between abc-bin.000004... (6 Replies)
Discussion started by: arijitsaha
6 Replies

8. UNIX for Advanced & Expert Users

Find all files in the current directory excluding hidden files and directories

Find all files in the current directory only excluding hidden directories and files. For the below command, though it's not deleting hidden files.. it is traversing through the hidden directories and listing normal which should be avoided. `find . \( ! -name ".*" -prune \) -mtime +${n_days}... (7 Replies)
Discussion started by: ksailesh1
7 Replies

9. Shell Programming and Scripting

Listing the file name and no of records in each files for the files created on a specific day

Hi, I want to display the file names and the record count for the files in the 2nd column for the files created today. i have written the below command which is listing the file names. but while piping the above command to the wc -l command its not working for me. ls -l... (5 Replies)
Discussion started by: Showdown
5 Replies

10. Shell Programming and Scripting

Append string to all the files inside a directory excluding subdirectories and .zip files

Hii, Could someone help me to append string to the starting of all the filenames inside a directory but it should exclude .zip files and subdirectories. Eg. file1: test1.log file2: test2.log file3 test.zip After running the script file1: string_test1.log file2: string_test2.log file3:... (4 Replies)
Discussion started by: Ravi Kishore
4 Replies
PERLHACKTUT(1)						 Perl Programmers Reference Guide					    PERLHACKTUT(1)

NAME
perlhacktut - Walk through the creation of a simple C code patch DESCRIPTION
This document takes you through a simple patch example. If you haven't read perlhack yet, go do that first! You might also want to read through perlsource too. Once you're done here, check out perlhacktips next. EXAMPLE OF A SIMPLE PATCH
Let's take a simple patch from start to finish. Here's something Larry suggested: if a "U" is the first active format during a "pack", (for example, "pack "U3C8", @stuff") then the resulting string should be treated as UTF-8 encoded. If you are working with a git clone of the Perl repository, you will want to create a branch for your changes. This will make creating a proper patch much simpler. See the perlgit for details on how to do this. Writing the patch How do we prepare to fix this up? First we locate the code in question - the "pack" happens at runtime, so it's going to be in one of the pp files. Sure enough, "pp_pack" is in pp.c. Since we're going to be altering this file, let's copy it to pp.c~. [Well, it was in pp.c when this tutorial was written. It has now been split off with "pp_unpack" to its own file, pp_pack.c] Now let's look over "pp_pack": we take a pattern into "pat", and then loop over the pattern, taking each format character in turn into "datum_type". Then for each possible format character, we swallow up the other arguments in the pattern (a field width, an asterisk, and so on) and convert the next chunk input into the specified format, adding it onto the output SV "cat". How do we know if the "U" is the first format in the "pat"? Well, if we have a pointer to the start of "pat" then, if we see a "U" we can test whether we're still at the start of the string. So, here's where "pat" is set up: STRLEN fromlen; register char *pat = SvPVx(*++MARK, fromlen); register char *patend = pat + fromlen; register I32 len; I32 datumtype; SV *fromstr; We'll have another string pointer in there: STRLEN fromlen; register char *pat = SvPVx(*++MARK, fromlen); register char *patend = pat + fromlen; + char *patcopy; register I32 len; I32 datumtype; SV *fromstr; And just before we start the loop, we'll set "patcopy" to be the start of "pat": items = SP - MARK; MARK++; sv_setpvn(cat, "", 0); + patcopy = pat; while (pat < patend) { Now if we see a "U" which was at the start of the string, we turn on the "UTF8" flag for the output SV, "cat": + if (datumtype == 'U' && pat==patcopy+1) + SvUTF8_on(cat); if (datumtype == '#') { while (pat < patend && *pat != ' ') pat++; Remember that it has to be "patcopy+1" because the first character of the string is the "U" which has been swallowed into "datumtype!" Oops, we forgot one thing: what if there are spaces at the start of the pattern? "pack(" U*", @stuff)" will have "U" as the first active character, even though it's not the first thing in the pattern. In this case, we have to advance "patcopy" along with "pat" when we see spaces: if (isSPACE(datumtype)) continue; needs to become if (isSPACE(datumtype)) { patcopy++; continue; } OK. That's the C part done. Now we must do two additional things before this patch is ready to go: we've changed the behaviour of Perl, and so we must document that change. We must also provide some more regression tests to make sure our patch works and doesn't create a bug somewhere else along the line. Testing the patch The regression tests for each operator live in t/op/, and so we make a copy of t/op/pack.t to t/op/pack.t~. Now we can add our tests to the end. First, we'll test that the "U" does indeed create Unicode strings. t/op/pack.t has a sensible ok() function, but if it didn't we could use the one from t/test.pl. require './test.pl'; plan( tests => 159 ); so instead of this: print 'not ' unless "1.20.300.4000" eq sprintf "%vd", pack("U*",1,20,300,4000); print "ok $test "; $test++; we can write the more sensible (see Test::More for a full explanation of is() and other testing functions). is( "1.20.300.4000", sprintf "%vd", pack("U*",1,20,300,4000), "U* produces Unicode" ); Now we'll test that we got that space-at-the-beginning business right: is( "1.20.300.4000", sprintf "%vd", pack(" U*",1,20,300,4000), " with spaces at the beginning" ); And finally we'll test that we don't make Unicode strings if "U" is not the first active format: isnt( v1.20.300.4000, sprintf "%vd", pack("C0U*",1,20,300,4000), "U* not first isn't Unicode" ); Mustn't forget to change the number of tests which appears at the top, or else the automated tester will get confused. This will either look like this: print "1..156 "; or this: plan( tests => 156 ); We now compile up Perl, and run it through the test suite. Our new tests pass, hooray! Documenting the patch Finally, the documentation. The job is never done until the paperwork is over, so let's describe the change we've just made. The relevant place is pod/perlfunc.pod; again, we make a copy, and then we'll insert this text in the description of "pack": =item * If the pattern begins with a C<U>, the resulting string will be treated as UTF-8-encoded Unicode. You can force UTF-8 encoding on in a string with an initial C<U0>, and the bytes that follow will be interpreted as Unicode characters. If you don't want this to happen, you can begin your pattern with C<C0> (or anything else) to force Perl not to UTF-8 encode your string, and then follow this with a C<U*> somewhere in your pattern. Submit See perlhack for details on how to submit this patch. AUTHOR
This document was originally written by Nathan Torkington, and is maintained by the perl5-porters mailing list. perl v5.16.3 2013-03-04 PERLHACKTUT(1)
All times are GMT -4. The time now is 10:19 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy