使用find . -print0
似乎是获得在bash的文件列表的唯一可靠的方式因含有空格,换行,引号等文件名的可能性
但是,我很难在bash或其他命令行实用程序中使find的输出有用。我设法利用输出的唯一方法是将其通过管道传输到perl,并将perl的IFS更改为null:
find . -print0 | perl -e '$/="\0"; @files=<>; print $#files;'
本示例将打印找到的文件数,避免文件名中的换行符损坏计数的危险,如发生以下情况:
find . | wc -l
由于大多数命令行程序不支持以空分隔的输入,因此我认为最好的办法是find . -print0
像在上面的perl片段中所做的那样,在bash数组中捕获输出,然后继续执行任务,无论如何是。
我怎样才能做到这一点?
这不起作用:
find . -print0 | ( IFS=$'\0' ; array=( $( cat ) ) ; echo ${#array[@]} )
一个更普遍的问题可能是:如何使用bash中的文件列表来做有用的事情?