Script to remove spaces and mv a file

Tags
shell scripts

 
Thread Tools Search this Thread
# 1  
Old 04-20-2018
Script to remove spaces and mv a file

I've tried various solutions to move a file name with spaces and nothing seems to work. I need to take a date as input, prepend it to a filename with spaces then remove the spaces and mv the file to the new name.
Code:
#!/bin/ksh
#

if (( $# != 1 ))
then
   echo "Usage: `basename $0` <DATE> "
   echo ""
   exit 1
fi

echo " "
IN_DATE=${1}
IN_FILE="_test with space.txt"
echo "date ${IN_DATE}"

echo " "
oldFILE="$IN_DATE""$IN_FILE"

echo " "
newFILE=$(echo "$oldFILE" | sed 's/ /_/g')
echo "newFILE ${newFILE}"

echo " "
mv "${oldFile}" "${newFILE}"

which produces...
Code:
space_test 20180419

date 20180419

oldfile 20180419_test with space.txt

newFILE 20180419_test_with_space.txt

mv: cannot stat ‘’: No such file or directory

I've also tried using awk to add single or double quotes around the original file name.
Code:
oldFILE="$IN_DATE""$IN_FILE"
echo "oldfile ${oldFILE}"
origFILE=$(echo ${oldFILE} | awk '{print "\042"$0"\042"}')
echo "origfile ${origFILE}"

AND

oldFILE="$IN_DATE""$IN_FILE"
echo "oldfile ${oldFILE}"
origFILE=$(echo ${oldFILE} | awk '{print "\047"$0"\047"}')
echo "origfile ${origFILE}"

the echo shows the single or double quotes around the file name but I still get the same error on the mv.
Code:
oldfile 20180419_test with space.txt
origfile "20180419_test with space.txt"

oldfile 20180419_test with space.txt
origfile '20180419_test with space.txt'

I've also tried escaping the spaces with a \ but so far nothing that I've tried has worked. I get the same error. From the command line the mv works using ' or " or escaping the space with \.

Any suggestions?

Last edited by w_s_s; 04-20-2018 at 01:27 PM.. Reason: snytax
# 2  
Old 04-20-2018
In your first code sample, origFile is unset, thus empty, and mv doesn't find anything and complains as posted.
A caveat: the single quotes in the mv error message seem to be locale dependent - make sure you use ASCII characters for any input.

And, you might want to learn about shells' "parameter expansion / pattern substitution" to eliminate the sed stuff.
# 3  
Old 04-20-2018
Thanks for the reply.

The {origFILE} on the mv was a cut and paste issue from trying different commands. With the mv command as

Code:
echo " " mv "${oldFile}" "${newFILE}"

I receive
Code:
mv: cannot stat ‘’: No such file or directory

For the space substitution I've also tried tr, rename, and doing it in the mv command (mv "$oldFILE" "${oldFILE// /_}"). I will look where you suggested to see if there's other options I haven't tried yet.

Last edited by w_s_s; 04-20-2018 at 01:25 PM.. Reason: typo
# 4  
Old 04-20-2018
Please post the result of
Code:
echo mv "${oldFile}" "${newFILE}"

for debugging purposes. Also, run the code with the -vx options set.
# 5  
Old 04-20-2018
Code:
 bash -vx space_test 20180420
#!/bin/ksh
#

if (( $# != 1 ))
then
   echo "Usage: `basename $0` <DATE> "
   echo ""
   exit 1
fi
+ ((  1 != 1  ))

echo " "
+ echo ' '

IN_DATE=${1}
+ IN_DATE=20180420
IN_FILE="_test with space.txt"
+ IN_FILE='_test with space.txt'
echo "date ${IN_DATE}"
+ echo 'date 20180420'
date 20180420

echo " "
+ echo ' '

oldFILE="$IN_DATE""$IN_FILE"
+ oldFILE='20180420_test with space.txt'
echo "oldfile ${oldFILE}"
+ echo 'oldfile 20180420_test with space.txt'
oldfile 20180420_test with space.txt

echo " "
+ echo ' '

newFILE=$(echo "$oldFILE" | sed 's/ /_/g')
++ echo '20180420_test with space.txt'
++ sed 's/ /_/g'
+ newFILE=20180420_test_with_space.txt
echo "newFILE ${newFILE}"
+ echo 'newFILE 20180420_test_with_space.txt'
newFILE 20180420_test_with_space.txt

echo " "
+ echo ' '

mv "${oldFILE}" "${newFILE}"
+ mv '20180420_test with space.txt' 20180420_test_with_space.txt
mv: cannot stat ‘20180420_test with space.txt’: No such file or directory

exit
+ exit

---------- Post updated at 01:37 PM ---------- Previous update was at 01:24 PM ----------

I found the typo. I had not used the -vx options before they helped me see the problem. Thanks!

Last edited by w_s_s; 04-20-2018 at 02:34 PM..
# 6  
Old 04-20-2018
oldFILE != oldFile
This User Gave Thanks to RudiC For This Post:
w_s_s (04-20-2018)

|
Thread Tools Search this Thread
Search this Thread:
Advanced Search

More UNIX and Linux Forum Topics You Might Find Helpful
How to remove leading and trailing spaces for variable in shell script? pottic Shell Programming and Scripting 10 10-19-2018 11:39 PM
Remove spaces from the file aarsh.dave Shell Programming and Scripting 4 10-23-2014 06:30 PM
How to remove spaces from a file selectively? Sharma331 Shell Programming and Scripting 20 10-07-2014 06:00 AM
How to remove spaces between the columns in UNIX script?. karingulanagara Shell Programming and Scripting 2 03-01-2013 01:46 AM
Remove spaces in a file i150371485 Shell Programming and Scripting 5 11-23-2012 03:08 AM
How to remove all blank spaces in a file carlr Shell Programming and Scripting 9 10-12-2012 10:50 AM
Remove spaces from start of file names jacobs.smith Shell Programming and Scripting 6 07-29-2012 08:10 PM
How to remove spaces in the file? anurupa777 Linux 12 07-09-2012 06:37 PM
Remove spaces / tabs from variable in script lodhi1978 Shell Programming and Scripting 5 12-09-2011 05:13 AM
remove spaces in between file kanikasharma UNIX for Dummies Questions & Answers 4 10-19-2011 08:22 AM
how to remove blank spaces in file shubhig15 Shell Programming and Scripting 1 10-26-2010 07:44 AM
Remove trailing spaces from file avillanueva Shell Programming and Scripting 6 04-09-2010 02:04 AM
Shell Script to remove spaces while writing to the file dinesh1985 Shell Programming and Scripting 6 11-20-2009 05:31 AM
Remove spaces between file names srimitta Shell Programming and Scripting 10 03-30-2009 08:16 AM
How can i remove spaces in between the fields in a file dsravan Shell Programming and Scripting 3 09-26-2006 05:11 PM