need help understanding mv


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting need help understanding mv
# 1  
Old 09-24-2009
need help understanding mv

I just started shell coding and I'm a bit confused on how 'mv' works can someone explain to me how it works and if i did this correctly. Thanks.

Code:
echo "Enter Name of the first file:"
    read file1
    #echo $file1
    if [! -e $file1]; then
        echo "Sorry, file does not exist."
        exit 1
    fi

    echo "Name of the second file:"
    read file2

    if [! -e $file2]; then    
        echo "Sorry, file does not exist."
        exit 1
    else
        #echo $file1
        #echo $file2
        set tmp = $file1
        mv "$file2" "$file1"
        mv "$tmp" "$file2"
    fi;;

once it gets down to the 'mv' i get
Quote:
mv: cannot stat `file.txt': No such file or directory
which confuses me since both files pass the if statements. Can someone clarify?
# 2  
Old 09-24-2009
try.. these with spaces.
Code:
if [ ! -e $file1 ]; then

although i would prefer it this way

Code:
if [ ! -f $file1 ]; then

# 3  
Old 09-28-2009
sorry for the long wait. Thanks. After fixing the spaces I have
Code:
echo "Enter Name of the first file:"
    read file1
    #echo $file1
    if [ ! -f $file1]; then
        echo "Sorry, file does not exist."
        exit 1
    fi

    echo "Name of the second file:"
    read file2

    if [ ! -f $file2]; then    
        echo "Sorry, file does not exist."
        exit 1
    else
        #echo $file1
        #echo $file2
        set tmp = $file1
        mv "$file2" "$file1"
        mv "$tmp" "$file2"
    fi;;



But when I run it I still get this error

Quote:
Enter Name of the first file:
txt.txt
./Assgn1.bash: line 52: [: missing `]'
Name of the second file:
file.txt
./Assgn1.bash: line 60: [: missing `]'
mv: cannot stat `file.txt': No such file or directory
mv: cannot stat `': No such file or director
Am using the mv in the wrong manner?
(I'm trying to swap the name of the files.)
# 4  
Old 09-28-2009
you still have not followed the suggested change completely..
# 5  
Old 09-28-2009
I dislike white spaces . . . thanks. Can anyone explain

Quote:
mv: missing destination file operand after `file'
Try `mv --help' for more information.
Code:
set tmp = $file1
		mv  $file2 $file1
		mv  $tmp $file2

After the first "mv" is executed $file2 gets deleted so when the second "mv" command occurs there is no longer a $file2. Is there a way to not delete $file2 when it gets copied to $file1?
# 6  
Old 09-28-2009
You should by now have a space after "[" and a space before "]".

The logic in this bit needs attention if you want to swap the filenames:

Quote:
set tmp = $file1
mv "$file2" "$file1"
mv "$tmp" "$file2"
Code:
Maybe try:
        # Rename both files to preserve their permissions.
        mv "${file1}" "${file1}.TMP"
        mv "${file2}" "${file2}.TMP"
        # Cross-rename the files to their final names
        mv "${file1}.TMP" "${file2}"
        mv "${file2}.TMP" "${file1}"


BTW. I can't make "set tmp = $file1" do anything useful.

Some may argue that the filename swap can be done in three steps (not four). However this can introduce unexpected changes to file permissions.

Footnote: Notice the curly braces. You will rarely find cause to not use them!

Footnote 2: Providing both files are on the same filesystem a "mv" command just changes the name of the inode. It is very quick and the contents of the files do not move. If the files are on different filesystems they do actually move!

Last edited by methyl; 09-28-2009 at 11:47 AM.. Reason: Footnote
# 7  
Old 09-28-2009
Thanks guys. Can you briefly explain the curly brackets.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Need your help in understanding this

Hi, I found this in a script and I would like to know how this works Code is here: # var1=PART1_PART2 # var2=${var1##*_} # echo $var2 PART2 I'm wondering how ##* makes the Shell to understand to pick up the last value from the given. (2 Replies)
Discussion started by: sathyaonnuix
2 Replies

2. UNIX for Dummies Questions & Answers

Understanding lseek

I tried to use lseek system call to determine the number of bytes in a file. To do so, I used open system call with O_APPEND flag to open a file. As lseek returns the current offset so I called lseek for opened file with offset as zero and whence as SEEK_CUR. So I guess it must return the number of... (3 Replies)
Discussion started by: Deepak Raj
3 Replies

3. Shell Programming and Scripting

Help with understanding of alias

Hi, I saw the following explanation about alias in bash from gnu website, but I didn't get the meaning: Bash always reads at least one complete line of input before executing any of the commands on that line. Aliases are expanded when a command is read, not when it is executed. Therefore, an... (3 Replies)
Discussion started by: Roy987
3 Replies

4. Shell Programming and Scripting

Help understanding the script

Hi Guys, I am new to scripting , I am trying to rebuild a script based on an old script. Can someone help me figure out what the script is doing? This is only a part of the script. I am looking to interpret these two points in the scripts:- 1) test=`echo $?` while I do not... (3 Replies)
Discussion started by: rajsan
3 Replies

5. Shell Programming and Scripting

Understanding a regex

Hi, Please help me to understand the bold segments in the below regex. Both are of same type whose meaning I am looking for. find . \( -iregex './\{6,10\}./src' \) -type d -maxdepth 2 Output: ./20111210.0/src In continuation to above: sed -e 's|./\(*.\{1,3\}\).*|\1|g' Output: ... (4 Replies)
Discussion started by: vibhor_agarwali
4 Replies

6. Shell Programming and Scripting

Understanding <<EOF

Hi all I stuck with a problem. I want to understand the execution of the below code. Can any one please help me `sqlplus username/passwd@DB << EOF set serveroutput on declare begin sql_query; end; / commit / quit EOF` My ques is why do we use EOF and how does it help. (4 Replies)
Discussion started by: parthmittal2007
4 Replies

7. Solaris

Understanding 'du' command

Hi I have a questions related 2 commands : 'du' and 'ls'. Why is the difference between output of 'du' and 'ls' cmd's ? Command 'du' : ------------------ jakubn@server1 /home/jakubn $ du -s * 4 engine.ksh 1331 scripts 'du -s *' ---> shows block count size on disk (512 Bytes... (5 Replies)
Discussion started by: presul
5 Replies

8. UNIX for Dummies Questions & Answers

understanding {%/*}/

Hi Gurus: I am trying to understand the following line of code.I did enough of googling to understand but no luck.Please help me understand the follow chunk of code: X=$0 MOD=${X%/*}/env.ksh X is the current script from which I am trying to execute. Say if X=test.ksh $MOD is echoing :... (3 Replies)
Discussion started by: vemana
3 Replies

9. Shell Programming and Scripting

Need help for understanding of script

# sub: find block (in cols), return line-numbers (begin-end) or 0 if notfound sub findb{ my ($exp1,$col1,$exp2,$col2)= @_; # $exp = expression to find, $col - column to search in my $cnt=0; my ($val1,$val2); my ($beg,$end); for($cnt=1;$cnt<=65536;$cnt++){ $val1 =... (3 Replies)
Discussion started by: suvenduperl
3 Replies
Login or Register to Ask a Question