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