bash - 如何使用 bash shell 在 if 语句中检查特定文件类型

标签 bash shell unix if-statement

我想知道如何寻找..比方说给定目录中的文本文件。我想遍历目录中的所有文件,对于每个文本文件,我想将其转换为 pdf 文件。问题是,我不知道如何在 bash shell 中的 if 语句参数内检查文件是否是文本文件。

我设置了我的ListOfFiles=`ls -l` 我用 for 进行迭代循环,我只需要知道如何检查 if 中的文件类型声明。

提前谢谢您。

最佳答案

下面列出了当前目录下的所有文本文件。

file --mime-type * -F$'\t' | awk -F'\t *' '$2 ~/^text\/plain/ { print $1 }'

注意:这假设您的文件名既没有嵌入制表符也没有嵌入换行符,这通常不是问题。

  • file --mime-type * -F$'\t' 确定当前文件夹中每个文件的文件类型 (*) 并打印两列列表:当前的文件名,后跟一个制表符 (-F'$\t'),后跟用于对齐的空格,后跟表示为 MIME 类型的文件类型。

  • awk -F'\t *' '$2 ~/^text\/plain/{ print $1 }' 然后将每一行解析为文件名和 MIME 类型 ( -F'\t *),测试 MIME 类型(字段 2,$2)是否以 (^) 字符串 text/plain< 开头,如果是,则打印文件名(字段 1,$1)。

要循环处理结果文件,请使用 while:

while IFS= read -r textfile; do
  # Work with "$textfile"
done < <(file --mime-type * -F$'\t' | awk -F'\t *' '$2 ~/^text\/plain/ { print $1 }')

请注意,虽然您可以for file in * 循环内的条件中调用 file,但上述方法效率更高。
作为记录,以下是在条件中使用该命令的方法:

if [[ $(file -b --mime-type "$file") == 'text/plain'* ]]; then ...

关于bash - 如何使用 bash shell 在 if 语句中检查特定文件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38733947/

相关文章:

macos - 如何检查在 mac bash 应用程序启动时是否按下了选项键

linux - 如何查找两台计算机上的文件/文件夹?

linux - $'\n' 在 bash 中是什么意思?

unix - Hudson 触发器远程构建会出现禁止的 403 错误

linux - 内核是一个进程吗?

c - 控制线程挂起和恢复一组工作线程

macos - Bash sleep 退出早于 OSX 中使用 m 或 h 键指定的时间

bash - 为什么 AWK 拒绝总结 float

shell - Neo4j - 通过 Neo4jShell 将密码查询文件结果导出到 .csv 或 .txt 文件

bash - 解析前缀为 "Product Name:"的特定字符串的文本文件