运行 ls -d "$PWD"/* 命令时参数列表太长

运行 ls -d "$PWD"/* 命令时参数列表太长

我正在尝试执行

ls -d "$PWD"/* > formmlFileList43k.list

但我收到以下错误:

bash: /bin/ls: Argument list too long

我读过使用管道不会有这样的限制,我如何使用管道来完成相同的任务:

ls -d "$PWD"/* > formmlFileList43k.list

任何帮助,将不胜感激

答案1

目录中的项目太多。这会导致 shell 扩展*为超过 ARG_MAX 字节的命令行参数:

$ grep ARG_MAX /usr/include/linux/limits.h
#define ARG_MAX       131072    /* # bytes of args + environ for exec() */

我建议您使用find以下解决方法:

$ find "${PWD}" -mindepth 1 -maxdepth 1 > formmlFileList43k.list

编辑:@hagello 写了一个关于以点开头的文件名的重要注释。这些文件应从find输出中排除。所以,正确的解决方法是:

$ find "${PWD}" -mindepth 1 -maxdepth 1 '!' -name '.*' > formmlFileList43k.list

相关内容