在 MAC 操作系统上使用终端时,我需要返回路径以及目录和所有子目录中的文件名,但前提是文件具有特定的文件扩展名(例如 .txt)。
我尝试过这个,但它不会按文件扩展名进行过滤:
find $PWD/* -maxdepth 20
我也尝试过这个,但它没有返回我的目录路径:
ls my-dir |egrep '\.txt$'
答案1
如果您使用的是 Macos,那么您的 shell 可能是 zsh,那么:
print -rC1 -- $PWD/**/*.txt(N)
将print
r
aw on olumn 名称以当前工作目录或以下目录1
C
结尾的非隐藏文件(任何类型,包括常规、符号链接、fifo...)的完整路径,按词法排序.txt
添加D
限定符(在(...)
上面的内部)以包含隐藏的限定符,.
以限制为常规的仅文件,om
按年龄排序:q
,引用文件路径中的特殊字符(如果有)...
对于2 个独立列中的这些路径的h
ead 和ail:t
() {print -rC2 -- $@:h $@:t; } $PWD/**/*.txt(N)
我们将路径列表传递给匿名函数,该函数在olumns上打印其 @rguments 的h
eads 和ails 。t
2
C
答案2
读man find
。这些是正确的方法:
find "$PWD" -type f -name '*.txt' -print
或者,如果文件名包含空格或其他“有趣”字符(按照标准,除了/
和之外的任何字符NUL 0x00
都是允许的):
find "$PWD" -type f -name '*.txt' -print0 | \
xargs -0 -r stat -c "%N\n"
读man xargs stat
。