Usage of '.' in MV command

Hi,

Could you please let me know, why we should not use '.' in move command, if we use it, is it something wrong.. Please share the details on it.

 
/home/rahualux/emp.csv /home/rahualux/details/employee_files/.
 

Or other example for mutlipile files

 
/home/rahualux/*.csv /home/rahualux/details/employee_files/.
 

Every directory has a shorthand name to refer to itself. That special name is the `.' (dot) and it is a map to the inode of the directory.
It is quite useful when you are in a directory and you only have to enter a `.' to refer to where you are, instead of the whole path.
That's why people refer to the `.' as the "current directory". Or "`this' directory".

Using your example:

/home/rahualux/details/employee_files/.

It would be as saying: "`That' directory" and it doesn't make much sense, since you have to enter the full path already, including the name of the `that' employee_files directory.

In /home/rahualux/details , there can not be two inodes that has the same name, which means, there can NOT be a file named employee_files and a directory employee_files. Therefore, the trailing `/' in /home/rahualux/details/employee_files/ is not necessary.
mv knows that it is a directory.

To summarize the concepts using your example:

mv /home/rahualux/emp.csv /home/rahualux/details/employee_files

In human terms, it means, move the file emp.csv to employee_files , if employee_files is a directory, that directory gets a file named emp.csv , if employee_files is a file, that's what emp.csv would be called.

/home/rahualux/*.csv /home/rahualux/details/employee_files

employee_files has to be a directory, since multiple `anything.csv' can not be renamed to be called employee_files , due to the rule I mentioned before of "there can not be two inodes that have the same name, in the same directory"

1 Like

Thank you Aia,very useful.

I agree with what Aia said, but there are cases where adding a "/." (or just "/") to the end of a pathname that is supposed to be a directory can be helpful. For example, with the command:

mv /home/rahualux/*.csv /home/rahualux/details/employee_files

it is true that mv will issue a diagnostic if /home/rahualux/*.csv expands to a list of more than one file if /home/rahualux/details/employee_files is not a directory; but if the *.csv only matches one file and employee_files does not exist (or is a non-directory file), the file matching *.csv will be copied to or linked to employee_files destroying its previous contents if there were any. While, under these circumstances, the command:

mv /home/rahualux/*.csv /home/rahualux/details/employee_files/

will get a diagnostic saying that employee_files is not a directory.

When I am typing a command into the shell to move a file into a directory, I usually add a trailing "/" on the directory name just to protect against typing mistakes. I tend not to do that in scripts if I am sure that the directory structure is safe. If the script I'm writing is moving files around in an file hierarchy where several people have write access and multiple people/processes might be rearranging files while the script is running, I frequently use a trailing "/" on the target directories so the script fails as soon as something goes wrong.

Whether or not you decide to add a "/" or "/." to the ends of directory names is something that will probably depend on your typing skills, how many times you lose a file by accidentally misspelling a directory name, how much pain you have gone through while trying to recover a file you accidentally lost due to typing mistakes, and how important the files you are moving at the moment are to you.

2 Likes