sig_seg_v
sig_seg_v

Reputation: 570

In shell scripting, what does .[!.]* mean?

A command that prints a list of files and folders in the current directory along with their total sizes is du -sh *. That command alone doesn't, however, list hidden files or folders. I found a solution for a command that does correctly list the hidden files and folders along with the rest: du -sh .[!.]* *. Although it works perfectly, the solution was provided as-is, without any explanation.

What is the meaning of .[!.]*, exactly? How does it work?

Upvotes: 6

Views: 5721

Answers (3)

alijandro
alijandro

Reputation: 12157

.[!.]* the meaning is any file or directory name start with . but not following with ., so it will include all hidden files and directories under current directory but exclude parent directory.

Because this behaviour is decided by shell glob pattern. So you can use ls .[!.]* to see what actually get in your shell environment.

BTW, you can turn dotglob on in your shell to simplify your du command.

$ shopt -s dotglob
$ du -sh *
$ shopt -u dotglob

From bash manual

dotglob If set, bash includes filenames beginning with a `.' in the results of pathname expansion.

Upvotes: 0

georgexsh
georgexsh

Reputation: 16624

. - match a ., prefix of hidden file

[!.] - match any character, as long as it is not a ., see ref

* - any number of characters

so this pattern means match files starts with . but not ..

Upvotes: 3

tgo
tgo

Reputation: 1545

It's a globbing pattern that basically tells bash to find all files starting with a ., followed by any character but a .and containing any character after that.

See this page for a great explanation of bash globbing patterns.

Upvotes: 3

Related Questions