正如一些人已经提到的,Linux/UNIX 没有强制性的文件扩展名。但是,在基于 UNIX 的系统上,许多常见文件的类型可以由 file 命令确定。以下示例使用 file 命令将名称和类型或每个文件传递给 my_script:
find /path -type f | xargs file | while read -r line ; do my_script $line; done
xargs 命令已用于最小化文件命令的 exec 数量。
类型信息将非常广泛,从 xargs 文件步骤的以下示例输出中可以看出:
/usr/bin/easy_install-3.8: Python script, ASCII text executable
/usr/bin/splain: Perl script text executable
/usr/bin/nvzoom: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=e2295b7d737246db5a2986c790452139793bdbfc, for GNU/Linux 3.2.0, stripped
关于从文件名中提取路径的其他要求可以在 my_script 中完成,或者如果必须在 my_script 之前完成,则可以使用 bash 字符串提取或 sed/awk/perl 重新格式化输出。
如果您希望任何文件名中包含空格或其他特殊字符,那么按照之前答案中的建议,您可以使用 -print0:
find /path -type f -print0 | xargs -0 file | while read -r line ; do my_script "$line"; done