如何指定参数返回所有点文件,但不返回 .和 ..?

如何指定参数返回所有点文件,但不返回 .和 ..?

通常,通配符扩展不包含点文件:

% echo *
Applications Desktop Documents Downloads Library Movies Music Pictures Public bin

如果我明确要求点文件,我会得到它们:

% echo * .*
Applications Desktop Documents Downloads Library Movies Music Pictures Public bin . .. .CFUserTextEncoding .DS_Store .Trash .adobe .bash_history .cups .gitconfig .gnupg .history .lesshst .netbeans .scanview.cfg .sqlite_history .ssh .swt .systemmodeler .tcshrc .viminfo

但是,我得到....我不想要这些,例如,如果我要传递到du -s我想要目录中每个项目的大小的位置。是否有某种模式可以为我提供当前目录中的内容以及当前目录中不带 和 的所有.内容..

我用的是tcsh。

(关于“这个问题在这里可能已经有答案:”,请注意上面:不,这个问题在那里没有答案,因为该答案仅适用于 bash。)

答案1

对于tcsh6.17.01 及更高版本:

set globdot
du -s -- *

与年长的人:

du -s -- * .[^.]* ..?*

(有趣的是,这比它的 POSIX 对应项 ( ) 更好,* .[!.]* ..?*因为在tcsh(以及zshcsh仿真 (cshnullglob选项) 中),与 POSIX shell 相反,那些不匹配任何文件的模式将扩展为空而不是它们本身)

使用标准查找:

find . ! -name . -prune -exec du -s {} +

请注意,GNUdu有一个-d选项可以限制报告 dir 磁盘使用情况的深度:

du -ad1

答案2

您可以使用 ls -A 命令来不登记。和..内部命令替换:

echo "`ls -A`"

答案3

我通常使用:

du -ks * .[^.]*

这种方式...不匹配,并且应该相当便携。

答案4

没有简单的通用解决方案,因为它依赖于 shell:

对于 tcsh 或 bash:

echo .[^.]*

对于 ksh:

echo .*

但是,在 Nykakin 的情况下它将失败(以 .. 开头的文件)

对于更通用的答案,请使用“grep”或“find”,例如:

ls -a|grep '^\.\(..\|[^\.]\)'

这适用于我所知道的所有外壳,但没有 Nykakin 的外壳。还适用于其他解决方案可能失败的以下特殊情况:

.x
.x.
..x.

它的意思是:以一个点开头,后跟至少 2 个字符或一个非点的字符。

相关内容