How to read files with spaces


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers How to read files with spaces
# 1  
Old 05-18-2010
How to read files with spaces

Hi

I am a newbie to unix. I have a current script that reads a directory for excel files and renames the files. There is a problem now because some of the files have spaces. If I put quotes on the file, it will work but I dont know how to read all the files with quotes.

Variables
$1 = /data/
$2 = xls
$3 = AAA
$4 = /data/

filenames are :

report 1 and 1a.xls (this doesnt work)
report2_1.xls (this works, renames AAAreport2_1.xls)
Code:
for fname in $1/*.$2 ; do
    newname=`eval basename $fname`
    newfile=$3$newname
    echo "newfile is " $newfile
    if test -f $fname ;  then
        mv $fname $4/$newfile
    fi
done

If anyone can help, that would be great.

Thanks.
Lilly

Last edited by Franklin52; 05-18-2010 at 02:36 PM.. Reason: Please use code tags.
# 2  
Old 05-18-2010
wrap your globs in parans:

Code:
for i in "$(ls -1)" ;do echo $i ;done

# 3  
Old 05-18-2010
Quote:
Originally Posted by Lillyt
Hi

I am a newbie to unix. I have a current script that reads a directory for excel files and renames the files. There is a problem now because some of the files have spaces. If I put quotes on the file, it will work but I dont know how to read all the files with quotes.

Variables
$1 = /data/
$2 = xls
$3 = AAA
$4 = /data/

filenames are :

report 1 and 1a.xls (this doesnt work)
report2_1.xls (this works, renames AAAreport2_1.xls)
Code:
for fname in $1/*.$2 ; do
    newname=`eval basename $fname`
    newfile=$3$newname
    echo "newfile is " $newfile
    if test -f $fname ;  then
        mv $fname $4/$newfile
    fi
done

If anyone can help, that would be great.

Thanks.
Lilly
Use quotes and a while loop like:
Code:
while read fname ; do
    newname=${fname##*/}  # no need to use external command
    newfile="$3""$newname"
    echo "newfile is " "$newfile"
    if [ -f "$fname" ];  then
        mv "$fname" "$4""$newfile"
    fi
done < $1/*.$2

# 4  
Old 05-18-2010
If I put put "$1/*.$2" it put the all the files in 1 string.
# 5  
Old 05-18-2010
Sorry, that shouldn't work like that, try:
Code:
for fname in $1/*.$2; do
    newname=${fname##*/}  # no need to use external command
    newfile="$3""$newname"
    echo "newfile is " "$newfile"
    if [ -f "$fname" ];  then
        mv "$fname" "$4""$newfile"
    fi
done

This User Gave Thanks to Franklin52 For This Post:
# 6  
Old 05-18-2010
Thanks. it works

Thank it works.
Can you tell me how the filename is extracted from the directory path from your code "newname=${fname##*/}"

---------- Post updated at 04:17 PM ---------- Previous update was at 04:13 PM ----------

Thank it works.

Can you tell me how the filename is extracted from the directory path from your code "newname=${fname##*/}"
# 7  
Old 05-19-2010
Quote:
Originally Posted by Lillyt
Thank it works.
Can you tell me how the filename is extracted from the directory path from your code "newname=${fname##*/}"
Excerpt from the man page of ksh:

Quote:
${parameter#pattern}
${parameter##pattern}

If the shell pattern matches the beginning of the value of parame-
ter, then the value of this expansion is the value of the parameter
with the matched portion deleted. Otherwise the value of this
parameter is substituted. In the first form the smallest matching
pattern is deleted and in the second form the largest matching pat-
tern is deleted. When parameter is @, *, or an array variable with
subscript @ or *, the substring operation is applied to each ele-
ment in turn.

${parameter%pattern}
${parameter%%pattern}

If the shell pattern matches the end of the value of parameter,
then the value of this expansion is the value of the parameter with
the matched part deleted. Otherwise substitute the value of parame-
ter. In the first form the smallest matching pattern is deleted,
and in the second form the largest matching pattern is deleted.
When parameter is @, *, or an array variable with subscript @ or *,
the substring operation is applied to each element in turn.
Regards
This User Gave Thanks to Franklin52 For This Post:
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash - read white spaces

Hello! I have one problem with my bash script - I would like to be able to read white space characters from stdin (for example single " ") - can I acomplish that somehow? I need to read only one character at the time, so I use read -s -n 1 var but it doesn't work for whitespaces apparently. ... (3 Replies)
Discussion started by: xqwzts
3 Replies

2. Shell Programming and Scripting

Having a for loop read in lines with spaces?

Is this possible? I have a for loop in a shell script reading a list, but I want each line to be a loop, not each thing with a space. Here is the example: HOSTLIST="\ 1.2.3.4 serverA 1.2.3.5 serverB" for NBUHOST in `echo $HOSTLIST` do ssh ${SERVERNAME} "echo "${NBUHOST}"... (3 Replies)
Discussion started by: LordJezoX
3 Replies

3. Shell Programming and Scripting

how to read blank spaces

hi i have a file which store some data.the contents of my file is data1:data2 data3:data4 i have a script which read this file correct="$(cat /root/sh | cut -d: -f1)" i used this syntax..please help me which syntax is used to read blank spaces.and then remove it and after that how to read... (1 Reply)
Discussion started by: shubhig15
1 Replies

4. Shell Programming and Scripting

Read file line spaces

I have a script which read a file it does while read -r line, then i echo line out echo "$line" Problem is the echo does not echo space and tabs at the end of each line. How do i get the end of line space as well (6 Replies)
Discussion started by: kelseyh
6 Replies

5. Shell Programming and Scripting

(g)awk how to preseve white spaces (FS characters) or read a right subpart of $0?

Hi, I am using gawk (--posix) for extracting some information from something like the following lines (in a text file): sms_snath_hp_C/CORE BUILD PREREQUISITE: total 1556 drwxrwxrwx 2 sn sn 4096 2008-06-27 08:31 ./ drwxrwxrwx 13 sn sn 4096 2009-07-22 14:48 ../ -rwxrwxrwx 1 sn sn ... (14 Replies)
Discussion started by: shri_nath
14 Replies

6. 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

7. Shell Programming and Scripting

ksh - read file with leading spaces

Hi, Could someone has any suggestions on this? When read a line from a file, I need to check the first char in the line, it could be a space or any char. But the leading spaces are removed by read. Thanks. (2 Replies)
Discussion started by: momi
2 Replies

8. Shell Programming and Scripting

How to read a line when it starts with spaces

Hi , I use read command to get the input text, When i try to get the line starting with spaces or ending with spaces it automatically truncates the spaces and displays the remaining content. Code i tried (UserInput.sh): #!/bin/bash echo -n "Enter some text > " read text echo "You... (3 Replies)
Discussion started by: PrakashChinna
3 Replies

9. Shell Programming and Scripting

Read files including spaces

I am accessing two files. I am using read command to read from the files. For the first file, I need read the fields delimited by spaces, and for the other file, I need to read the whole line as a single field including the spaces. When I used read command for the second file, the spaces... (4 Replies)
Discussion started by: kumariak
4 Replies

10. Shell Programming and Scripting

Keep spaces with read command

Hi The following command read a string from the keyboard & echo it back. $ read S;echo "$S" ABCD ABCD As you see, the input has space. while it echo back the spaces are removed. Is there a way to keep the input intact and not removing any spaces? Also, the number of spaces may vary. ... (3 Replies)
Discussion started by: azmathshaikh
3 Replies
Login or Register to Ask a Question