I tried to display only hidden files but don't know how to do it.
That is working (but matching also dots in other places)
ls -la | grep '\.'
Was trying adding ^
but didn't find the solution.
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.
Sign up to join this communityls -ld .*
will do what you want.
find . -type f -name '\.*' -print
Must work if you want list every hidden file down in the directory hierarchy.
An improvement on Flup's answer:
ls -lad .[!.]* ..?*
This will list all files whose name starts with a dot and that are neither .
nor ..
.
Note that if you want to pipe the output of ls
to grep
(which, as pointed out by devnull, is never a good idea), make sure you use \ls
or command ls
because if ls
is aliased to show you colored output (as it is on Debian for example), its output contains ANSI escape sequences to create colored output, which will trip up your grep
if its pattern is anchored at the start of line.
-A
differs from -a
for directories that ls
descends into, but both are (equally) ignored and useless for names specified on the command line with -d
in effect. Also if ls
is aliased to --color=auto
then piping is okay; only --color=always
or --color
causes trouble.
Nov 14, 2018 at 7:18
If you want to parse ls
output, you must add ^
at beginning of regex and don't use -l
option. Using -l
causes each line output start with file or folder permission information, not file or folder name. So you should use like this:
ls -Ad | grep '^\.'
Or you can do with printf
bash builtin:
printf "%s\n" .*
If you use zsh
, you can use:
print -l .*
Here are two other ways to find hidden files only.
find . -maxdepth 1 -name ".*" -type f -ls
or
find . -maxdepth 1 -name ".*" -type f -printf "%P \n"
Use -maxdepth
to specify how far you want to search in the directory tree.
The solution of val0x00ff is really good, but it forgets hidden directories.
If you want hidden files and hidden directories, without . and .. :
find -maxdepth 1 -regex '\./\..+' -printf "%P\n"
find . \( -type f -o -type d \) -name '\.*' -print
; apply maxdepth
where needed.
May 6, 2018 at 7:38
Below one is much compact and support many variants
1) Display hidden files, directories and sub-directories
find . | grep "^\./\."
2) Display hidden directories and sub-directories only
find . -type d | grep "^\./\."
3) Display hidden files only in current and sub-directories
find . -type f | grep "^\./\."
4) Display hidden files and directories in current folder
find . -maxdepth 1 | grep "^\./\."
You can try:
find . -maxdepth 1 -type f -name '\.*' -print
find . -maxdepth 1 \( -type f -o -type d \) -name '\.*' -print
Of course you can use different maxdepth
values or remove it completely. Very helpful if you want to explore between directories (-type d
) or regular files (type f
) or both, and combine with other functions like:
(e.g. last modified time, based on @piroux example - completed by @jeroen-wiert-pluimers )
find . -maxdepth 1 \( -type f -o -type d \) -name '\.*' -exec stat -c %y {} \; -printf "%P\t"
You can try :
ls -a |grep -E "^\."
^ indicates it's the beginning of content with regexp
Try this:
ls -ap | grep -v / | grep '^\.'
-l
), whereas your approach relies on the "filenames only" ouptut of ls -a
, and is therefore likely not what the OP wants ...
ls
.
ls
is never a wonderful idea, but what you tried would have worked if you used the anchor^
to denote the start of match.ls -la | grep '^\.'
ls -la | awk '$9 ~ /^\./'
will.