我想知道如何寻找..比方说给定目录中的文本文件。我想遍历目录中的所有文件,对于每个文本文件,我想将其转换为 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/