LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Newbie (https://www.linuxquestions.org/questions/linux-newbie-8/)
-   -   Condition in cp/ls | grep (regex, now I have two problems) (https://www.linuxquestions.org/questions/linux-newbie-8/condition-in-cp-ls-%7C-grep-regex-now-i-have-two-problems-4175415085/)

Freddythunder 07-05-2012 12:38 PM

Condition in cp/ls | grep (regex, now I have two problems)
 
Hello,

I'm not sure where to post this question on the forum, but would like to see if someone could help me. I am still totally noob so I guess it's fitting here.

I have a situation where I have a folder with a bunch of image files. They are all pngs, but I need one copy with the extension and one copy without. The copy with is for HTML and the one without is for SEO friendly URL to tell Flash what to pull in and flash uses the file without. It's not ideal, but it is how it is and firefox loads the extension-less file, but the loading "wheel" at the top of the browser just spins forever when all is loaded.

I feel obligated to tell you, I have already created a script in PHP that does the task I want, but I would much rather find a command that will run in BASH so I can set up a shell and run it with cron and also run it through SSH. I know I can do both with the PHP script, but this problem is eating at me...

Anyway, I need a command (or series of commands) that will find all the extension-less png files that do NOT have a matching file.png in the same directory while ignoring .php, .zip, . & ..

I've found that I can list all extension-less files with
Code:

ls |grep -v '\.'
And I can list all .png files with
Code:

ls |grep ^.*\.png$
But how o how can I search with a condition? I tried using () in the command but BASH does not care for it.

Thanks!

MensaWater 07-05-2012 02:34 PM

Assuming all the files in the directory with no suffix are as you describe:

Code:

for nosuf in $(ls |grep -v '\.')
do if [ ! -f ${nosuf}.png ]
  then echo PNG file for $nosuf does not exist
  fi
done

You might even add a test to verify the file without a suffix IS a png file by running the "file" command on it.

Code:

for nosuf in $(ls |grep -v '\.')
do if file -b $nosuf |grep PNG
  then if [ ! -f ${nosuf}.png ]
        then echo PNG file for $nosuf does not exist
        fi
  fi
done


Freddythunder 07-05-2012 02:39 PM

cool. Looks like that will work. Thanks!

chrism01 07-05-2012 06:02 PM

Lateral thinking here; does it really matter if there is already a png file; why not not simplify the code and just create a .png for every extension-less file?

Freddythunder 07-05-2012 06:12 PM

That does solve a problem for a lookup, but I also want to list it out so I can read what images do not have that matching counterpart. I was hoping to get a regex I could use in ls |grep or somthing like that in one shot, but it looks like I'll be looping through. But thanks!

chrism01 07-05-2012 06:26 PM

Chill mate; far too many people try to do too much in one line of code; a short script is no big deal, honest :)
Not only that, but complex single lines of code are a b*gger to understand/debug; believe me I've seen lots ;)

MensaWater 07-06-2012 08:39 AM

Quote:

Originally Posted by Freddythunder (Post 4720348)
That does solve a problem for a lookup, but I also want to list it out so I can read what images do not have that matching counterpart. I was hoping to get a regex I could use in ls |grep or somthing like that in one shot, but it looks like I'll be looping through. But thanks!

ls |sort

Should put all your files in sort order by name so you'd see something like:

filea
filea.png
fileb
fileb.png
filec
filed
filed.png
filef
fileg
fileh
fileh.png

From such a list you can see that filec, filed, filef and fileg do not have corresponding .png files whereas filea, fileb, filed and fileh do.


All times are GMT -5. The time now is 04:40 PM.