I read Windows - What are "." and ".." in a directory? - Super User
It explains:
The single dot
.is also used if you want to pass the current directory as an argument to a command.
I am very confused. Can somebody give an example?
12 Answers
The question is about Windows but you tagged linux so my answer applies to Linux.
Every time you invoke a command, there's some working directory your're in at the moment; . denotes this directory. pwd is a general command to know what this directory is. While working in a shell like bash you can "go" to another directory with cd /another/directory/path.
Some commands (like cd above) accept directories (i.e. their paths) as argument(s). Now I'm feeling like talking about obvious basics; but your question seems to be basic, so here we go. The general syntax to pass an argument to some_command is like:
some_command argumentor even arbitrary number of arguments (four in this example):
some_command argument1 argument2 "argument3 with spaces" argument4You can use . as an argument instead of the path returned by pwd. If the command interprets it as a path to directory then it should be understood as the current working directory. Although cd . has little sense because it makes your shell "go" to the same directory it's already in, the syntax is perfectly valid. Useful example is
df .It reports disk space usage of the filesystem where your current working directory resides.
There are commands that operate on current working directory by default: ls is equivalent to ls ., du is equivalent to du .. Note this is not always the case: df prints all available filesystems while df . prints just one of them.
I wrote "if the command interprets it as a path to directory" because some commands don't. E.g. in bash the command
tr . , <<< foo.barwill print foo,bar (tr replaces . with , in the given foo.bar string). This is because tr interprets . as a single-character string.
This shows . is not translated to current directory path by the shell. Compare this to ~ which is translated to the value of $HOME (try echo ~ in bash). The interpretation of . as a certain path lays way deep inside the design of directory tree in Linux (broader: in UNIX).
So every command can interpret . on its own. But when it's meant to be a directory path, the convention is it should be the current working directory. Linux understands this and provides tools to support this "conversion".
Also note ls -a almost always prints . among the "real" directory content. It gets interesting when your current working directory gets deleted. In this case ls -a prints nothing, but ls . or df . still work, as if . was there.
A slightly contrived Windows example:
you can use . to set the attributes of the current directory:
C:\Path\to\Some\Directory> md sub1 sub2
C:\Path\to\Some\Directory> attrib * /s /d C:\Path\to\Some\Directory\sub1 C:\Path\to\Some\Directory\sub2
C:\Path\to\Some\Directory> cd sub2
C:\Path\to\Some\Directory\sub2> attrib +r .
C:\Path\to\Some\Directory\sub2> cd ..
C:\Path\to\Some\Directory> attrib * /s /d C:\Path\to\Some\Directory\sub1 R C:\Path\to\Some\Directory\sub2Here we set the read-only attribute on the sub2 directory
while we’re in it. attrib +r . is shorter and easier to type
than attrib +r ..\sub2 or attrib +r C:\Path\to\Some\Directory \sub2.