Trying to rewrite srm (safely remove): problem with spaces in filenames

Please support our Shell Scripting advertiser: Programming Forums - DaniWeb Sister Site
Thread Solved

Join Date: Jun 2008
Posts: 182
Reputation: mrboolf will become famous soon enough mrboolf will become famous soon enough 
Solved Threads: 18
mrboolf mrboolf is offline Offline
Junior Poster

Trying to rewrite srm (safely remove): problem with spaces in filenames

 
0
  #1
Jul 20th, 2008
Hi all.
I am trying to write a "light" version of srm just as an exercise of shell scripting (started today with this ^^" I have to keep it really simple)
Basically it should just search for a file and, if found, ask for a confirmation before deleting it.
Now, it worked fine with /any/directory/you/like/no_spaces_in_the_name.file and I hoped to make it a little less dumb
Here's the code:
#!/bin/bash
#
#Script to safely remove files (asks confirmation)
#
choice="n"
if [ $# -eq 0 ]
then
echo "srm: missing argument."
echo "Syntax: $0 file_to_safely_delete."
exit 1
fi
filename=$1
if [ $# -gt 1 ]
then
filename="'$@'"
echo "$filename"
fi
if test -f $filename 
then
echo "$filename found. Are you sure you want to permanently delete it? (y/n)"
read choice
if [ $choice = "y" ] 
then
`rm $filename`
echo "$filename permanently deleted."
else
echo "$filename untouched."
fi
else
echo "$filename not found. Nothing done."
fi

The added part is
Shell Scripting Syntax (Toggle Plain Text)
  1. if [ $# -gt 1 ]
  2. then
  3. filename="'$@'"
  4. echo "$filename"
  5. fi

I put in it echo "$filename" for debugging and it shows correctly the string 'name of file with spaces'
The error I receive is @ this line: if test -f $filename
It prints out this: line 18: test: too many arguments After I call it with srm just a try
I am just blind on why it doesn't work... any idea?
Anticipate thanks

p.s.
I have not yet find anything abount problems with spacing in shell scripting, but ¿strangely? if I indent the code like I'm used to with c/c++ it complains a lot so I'm not doing it at all. It's not urgent but I think I'm simply missing something obvious, so I'll be very grateful to anyone who'll give a sort of explanation ^^"

p.p.s.
as usual sorry for my english
Reply With Quote Quick reply to this message  
Join Date: Dec 2005
Posts: 5,850
Reputation: Salem has a reputation beyond repute Salem has a reputation beyond repute Salem has a reputation beyond repute Salem has a reputation beyond repute Salem has a reputation beyond repute Salem has a reputation beyond repute Salem has a reputation beyond repute Salem has a reputation beyond repute Salem has a reputation beyond repute Salem has a reputation beyond repute Salem has a reputation beyond repute 
Solved Threads: 751
Team Colleague
Salem's Avatar
Salem Salem is offline Offline
Void main'ers are DOOMed

Re: Trying to rewrite srm (safely remove): problem with spaces in filenames

 
0
  #2
Jul 20th, 2008
Try putting the filename variable in quotes in other places as well.
Reply With Quote Quick reply to this message  
Join Date: Jun 2008
Posts: 182
Reputation: mrboolf will become famous soon enough mrboolf will become famous soon enough 
Solved Threads: 18
mrboolf mrboolf is offline Offline
Junior Poster

Re: Trying to rewrite srm (safely remove): problem with spaces in filenames

 
0
  #3
Jul 20th, 2008
I made these changes after your suggestion (red lines had quotes added around $filename)

#!/bin/bash
#
#Script to safely remove files (asks confirmation)
#
choice="n"
if [ $# -eq 0 ]
then
echo "srm: missing argument."
echo "Syntax: $0 file_to_safely_delete."
exit 1
fi
filename=$1
if [ $# -gt 1 ]
then
filename="'$@'"
echo "$filename"
fi
if test -f "$filename" 
then
echo "$filename found. Are you sure you want to permanently delete it? (y/n)"
read choice
if [ $choice = "y" ] 
then
`rm "$filename"`
echo "$filename permanently deleted."
else
echo "$filename untouched."
fi
else
echo "$filename not found. Nothing done."
fi

Now it doesn't complains, but it's malfunctioning: it enters the last else case even if "just a try" actually exists as a file :?

I can't imagine neither the cause nor the solution of this problem...

Actual situation:
Shell Scripting Syntax (Toggle Plain Text)
  1. ludovico@ludovico-laptop:~/Desktop$ srm just a try
  2. 'just a try'
  3. 'just a try' not found. Nothing done.

Ok, putting single quotes ' ' around the file name when calling the script made it work properly. I still don't understand why... I thought that
...
filename="'$@'"
...
would have done the job. Any explanation? Btw, thank you all, I'm just curious now ^^
Last edited by mrboolf; Jul 20th, 2008 at 9:06 am. Reason: Solved, but still not understanding how
Reply With Quote Quick reply to this message  
Join Date: Oct 2007
Posts: 399
Reputation: eggi will become famous soon enough eggi will become famous soon enough 
Solved Threads: 47
eggi eggi is offline Offline
Posting Whiz

Re: Trying to rewrite srm (safely remove): problem with spaces in filenames

 
1
  #4
Jul 20th, 2008
Hey There,

Inside the double quotes, in your test statement, the single quotes are being treated as literal characters in the value of the filename variable:

If you just change

if test -f filename="'$@'"
to

if test -f filename="$@"
you should be all set

Hope that helps

, Mike
Last edited by eggi; Jul 20th, 2008 at 11:48 pm. Reason: typo
Linux and Unix Tips, Tricks and Individual Advice - The Linux and Unix Menagerie!
------------------------------------------------------------------------
The greatest viral marketing idea of all time, get your copy of this Free Report now!
Reply With Quote Quick reply to this message  
Join Date: Jun 2008
Posts: 182
Reputation: mrboolf will become famous soon enough mrboolf will become famous soon enough 
Solved Threads: 18
mrboolf mrboolf is offline Offline
Junior Poster

Re: Trying to rewrite srm (safely remove): problem with spaces in filenames

 
0
  #5
Jul 21st, 2008
It helped
Thank you both!
Last edited by mrboolf; Jul 21st, 2008 at 4:14 am.
Reply With Quote Quick reply to this message  
Join Date: Oct 2007
Posts: 399
Reputation: eggi will become famous soon enough eggi will become famous soon enough 
Solved Threads: 47
eggi eggi is offline Offline
Posting Whiz

Re: Trying to rewrite srm (safely remove): problem with spaces in filenames

 
0
  #6
Jul 21st, 2008
Awesome

Glad to help out
Linux and Unix Tips, Tricks and Individual Advice - The Linux and Unix Menagerie!
------------------------------------------------------------------------
The greatest viral marketing idea of all time, get your copy of this Free Report now!
Reply With Quote Quick reply to this message  
Reply

This thread has been marked solved.
Perhaps start a new thread instead?
Message:



Other Threads in the Shell Scripting Forum
Thread Tools Search this Thread



Tag cloud for Shell Scripting
About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC