我想知道如何去查找..在給定目錄中說文本文件。我想遍歷我的目錄中的所有文件,並且對於每個文本文件,我想將其轉換爲pdf文件。問題是,我不知道如何檢查文件是否是bash shell中if語句的參數中的文本文件。如何使用bash shell檢查if語句中的特定文件類型
設置我ListOfFiles=`ls -l`
和我遍歷了for
循環,我只需要知道如何在if
聲明檢查文件類型。
預先感謝您。
我想知道如何去查找..在給定目錄中說文本文件。我想遍歷我的目錄中的所有文件,並且對於每個文本文件,我想將其轉換爲pdf文件。問題是,我不知道如何檢查文件是否是bash shell中if語句的參數中的文本文件。如何使用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 }')
請注意,當你能呼叫file
在條件一for file in *
循環中,上述方法是效率更高。
爲了記錄在案,這裏是你如何會在有條件使用命令:
if [[ $(file -b --mime-type "$file") == 'text/plain'* ]]; then ...
見http://mywiki.wooledge.org/ParsingLs - 你不應該在腳本中使用'ls'; globbing更有效率(不需要外殼程序,而'/ bin/ls'是一個單獨的可執行文件),更加正確(請參閱鏈接)。 –
... @ mklement0的答案包括一個分支,其性能優於正確性,但至少在那裏是一個有意的選擇,你得到的是回報。 (就我個人而言,我不會做出這樣的選擇 - 創建一個PDF文件非常昂貴,以至於單獨調用候選文件的成本幾乎會以總成本的百分比消失,除非您做了一些效率低下的事情,比如在所有文件中運行它,而不是僅限於新的,定期/定期的)。 –