Spaces in Lines for Variables


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Spaces in Lines for Variables
# 1  
Old 11-18-2009
Spaces in Lines for Variables

All,
I am driving myself crazy over this one. I have run a find command against a volume on a nas. That returns a full listing of path and file name.

This is an example of one line of output. I redirected the output of the find command to a file.

vol13/grch76/200013935/Characterizations of Plastics/Optical profiles/CP Al 1-3-2005.tif.20091111170132-2072-1292-0.ark_tagging

For each line of output I need to know the full path to the file, the file name and also take the .20091111 and beyond off the file name and use it.

I got the file name issue working and also have the full path to the file. I am trying to write a script to go through the output file, line for line and set variables to the full path and file name.

This is what I have:

Code:
#!/bin/sh

while read -r line
do
  FULLFILENAME=`echo "\"$line\"" |awk -F / '{print $NF}'`
  SHORTFILENAME=`echo "\"$FULLFILENAME\"" |cut -f 1,2 -d .`
  FULLPATHNAME=`echo "\"$line\"" |rev |cut -f2- -d/ | rev`
  echo "$FULLFILENAME"
  echo "$SHORTFILENAME"
  echo "$FULLPATHNAME"
  echo "rm "$FULLPATHNAME"/"$FULLFILENAME""  >> fixit.log 2>&1
  echo "rm "$FULLPATHNAME"/"$SHORTFILENAME"" >> fixit.log 2>&1
  #rm -f "$FULLPATHNAME"/"$FULLFILENAME" >> fixit.log @>&1
  #rm -f "$FULLPATHNAME"/"$SHORTFILENAME" >> fixit.log 2>&1
  #echo "cp -p "$FULLPATHNAME"/.snapshot/nightly.8/"$SHORTFILENAME" "$FULLPATHNAME"" >> fixit.log 2>&1
  #cp -p "$FULLPATHNAME"/.snapshot/nightly.8/"$SHORTFILENAME" "$FULLPATHNAME" >> fixit.log 2>&1
done < donw.out

The problem with this is that when I try to do the rm or copy commands the variable has some single or double quotes in it and it won't rm or copy as there is no such file or directory. Any thoughts would be appreciated.

Last edited by pludi; 11-18-2009 at 01:10 PM.. Reason: code tags, please...
# 2  
Old 11-18-2009
Please modify the logic to get the inode number .You can do something like..

Code:
find . -name "*" -type f -exec ls -i {} \;

and later you can remove file using inum.

Code:
find . -name "*" -inum <inodenum> -exec rm -f {} \;

# 3  
Old 11-18-2009
Still need help

The removal of the files is only one part of the issue as I need to also copy a file from .snapshot to the original location. The spaces are causing problems and I need to know if there is a different way of quoting the variables.
Thanks for the inode idea.
# 4  
Old 11-18-2009
Why don't you quote the full line ?
Code:
echo "rm $FULLPATHNAME/$FULLFILENAME"  >> fixit.log 2>&1
  echo "rm $FULLPATHNAME/$SHORTFILENAME" >> fixit.log 2>&1
  #rm -f "$FULLPATHNAME/$FULLFILENAME" >> fixit.log @>&1
  #rm -f "$FULLPATHNAME/$SHORTFILENAME" >> fixit.log 2>&1
  #echo "cp -p $FULLPATHNAME/.snapshot/nightly.8/$SHORTFILENAME $FULLPATHNAME" >> fixit.log 2>&1
  #cp -p "$FULLPATHNAME/.snapshot/nightly.8/$SHORTFILENAME" "$FULLPATHNAME" >> fixit.log 2>&1
done < donw.out

Can you give a sample of the output you get.
# 5  
Old 11-18-2009
Output

rm -f '"vol13/grch76/200013935/Characterizations of Plastics/Optical profiles/3 mil Al foil.tif.20091111170111-2072-1292-0.ark_tagging"'

This is the output from the log file. It looks like there is a single quote and a double quote around the front and back of this line. The rm -r command doesn't alert as to whether it was successful.

---------- Post updated at 02:18 PM ---------- Previous update was at 01:37 PM ----------

I figured it out.

the variables have to be quoted as a whole such as:
Code:
#!/bin/sh

while read -r line
do
  FULLFILENAME="`basename "$line"`
  SHORTFILENAME="`echo "$FULLFILENAME" |cut -f 1,2 -d .`"
  FULLPATHNAME="`dirname "$line"`
  echo "$FULLFILENAME"
  echo "$SHORTFILENAME"
  echo "$FULLPATHNAME"
  echo "rm "$FULLPATHNAME"/"$FULLFILENAME""  >> fixit.log 2>&1
  echo "rm "$FULLPATHNAME"/"$SHORTFILENAME"" >> fixit.log 2>&1
  #rm -f "$FULLPATHNAME"/"$FULLFILENAME" >> fixit.log @>&1
  #rm -f "$FULLPATHNAME"/"$SHORTFILENAME" >> fixit.log 2>&1
  #echo "cp -p "$FULLPATHNAME"/.snapshot/nightly.8/"$SHORTFILENAME" "$FULLPATHNAME"" >> fixit.log 2>&1
  #cp -p "$FULLPATHNAME"/.snapshot/nightly.8/"$SHORTFILENAME" "$FULLPATHNAME" >> fixit.log 2>&1
done < donw.out

I didn't have the double quotes before the back tick of the variable definition.
Thanks for the responses.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Curl not accepting spaces in script via variables

Hi All, I'm trying to run a script which issues rest commands via curl to an endpoint. If I put spaces in fields via something like insomnia, it works, but when I try from an input file, it's failing with a json error. while IFS=, read mname oname <------ my input file... (10 Replies)
Discussion started by: say170
10 Replies

2. Shell Programming and Scripting

Working with lines or variables that have spaces or special characters

Example: while read line do stat -c %G $line done < somefile.txtThe problem is that inside somefile.txt lines can have any symbol allowed as file name, like (). Even with spaces, it splits the words. somefile.txt:dira/my first jump.avi dirb/surf video (1080p).mkv (2 Replies)
Discussion started by: Tribe
2 Replies

3. Shell Programming and Scripting

Reform Lines in File without blank lines and spaces

Hello All, I have a file with data as below. Each line consists of 21 fields. I am not able to load them back to the database. 50733339,"834","834 ","005010X279A1","N","Y","007977163","0001 ",30,"2110D ","EB ","EB007 ","2 ","Conditional Required Data Element Miss ing... (3 Replies)
Discussion started by: Praveenkulkarni
3 Replies

4. Shell Programming and Scripting

Spaces in variables

I'm having a problem with this.... --------------------------------------------------- #!/bin/bash SPKTAG=" | festival --tts" echo "Welcome to my shell program" "$SPKTAG"; --------------------------------------------------- I have a variable call SPKTAG " | festival --tts" and I... (2 Replies)
Discussion started by: digitalviking
2 Replies

5. Shell Programming and Scripting

White spaces issue with shell variables

Hi all, I've a requirement as below Source file src.txt sample data: A<10 white spaces>B12<5 white spaces>C<17 white spaces> A1<5 white spaces>B22<5 white spaces>C13<17 white spaces> when I'm fetching a record from this file into a shell variable like below: vRec=`head -1 src.txt... (2 Replies)
Discussion started by: madhu_1126
2 Replies

6. Shell Programming and Scripting

Csh Problem using spaces in string variables

I have done something like this set phases = "a b" set phases = "phases="$phases echo $phases I get phases=a instead of phases=a b (3 Replies)
Discussion started by: kristinu
3 Replies

7. Shell Programming and Scripting

Variables containing spaces in lpadmin

I apologize for the long post. I have a lot of info... I am trying to write a script that will add a network printer (or several) to a system using information read in from a text file. My problem is the spaces in the PPD file name, I'm not sure how to put the file name in or how to read it back... (2 Replies)
Discussion started by: HalfNube
2 Replies

8. Shell Programming and Scripting

Read variables contain spaces from text file

Dears, I developed a shell script to read varibales from text file as the following: cat /dev/null > /rename-OUT.txt while read line do set -- `echo $line` snmpset -c dslmibs $1 sysName.0 octetstring $2 after=$(snmpget -c dslmibs $1 sysName.0 | cut -d: -f3) echo "$1,$2,$after" >>... (1 Reply)
Discussion started by: ahmed.zaher
1 Replies

9. UNIX for Dummies Questions & Answers

removing spaces from variables?

I stored results like this VAR=`wc -l < ls.txt` But the value of the wc gave me a padded number. How do I strip the padding from $VAR? Do you think I could use SED? Except instead of a file input, have a variable redirection input? (2 Replies)
Discussion started by: yongho
2 Replies

10. UNIX for Dummies Questions & Answers

delete blank lines or lines with spaces only

hi there i'm trying to delete blank lines and or lines with spaces only from a series of files in an directory. to do so, i'm using this: for files in `ls /users/myname/pesop* 2>/dev/null` do grep -v ^$ $files > newfile mv newfile $files done now, this works great for blank lines but... (3 Replies)
Discussion started by: vascobrito
3 Replies
Login or Register to Ask a Question