如果你只想要点文件:
find . -maxdepth 1 -type f -name '.*' -printf '%f\0'
测试-name '.*'
选择点文件。由于-name
接受 glob,因此.
表示文字句点并*
表示任意数量的任意字符。
该操作-printf '%f\0'
将打印不带路径的 NUL 分隔文件名。
如果您的名称选择标准变得更加复杂,find 还提供-regex
基于正则表达式选择文件的功能。GNU find 可以理解正则表达式的几种不同方言。这些可以用 选择-regextype
。支持的方言包括(emacs
默认)posix-awk
、、、、posix-basic
和。posix-egrep
posix-extended
Mac OSX 或其他 BSD 系统
BSDfind
不提供-printf
. 取而代之的是,试试这个:
find . -maxdepth 1 -type f -name '.*' -exec basename {} \;
请注意,这对所有文件名都是安全的,即使是那些包含诸如空格、制表符或换行符等难读字符的文件名。
将点文件放入 bash 数组
如果要将所有点文件和目录放入一个数组中,很简单:
all=(.*).
这对所有文件名都是安全的。
如果您只想获取常规文件,而不是目录,请使用 bash:
a=(); while IFS= read -r -d ''; do a+=("$(basename "$REPLY")"); done < <( find $HOME -maxdepth 1 -type f -name '.*' -print0 )
这对于所有文件名也是安全的。