2017-03-19 38 views
2

我想知道是否有任何方便的方法來做到這一點。 基本上我想要做的是創建一個可以創建多個文件類型的writedown的shell腳本。如何通過它們的類型遞歸獲取文件數量

例如輸出可能看起來像這樣:

ELF 64位LSB的可執行文件,X86-64:$量
ELF 32位LSB共享>對象,INTEL:$量
ASCII文本:$量

爲了讓您的文字有點像這樣,你需要:

  1. 創建你需要檢查
  2. 獲取文件名
  3. 養活他們的文件實用
  4. 剪切一個特定行從輸出第一

所以第一件事情的文件列表,讓所有我們的文件,我們要檢查

find $DIR -type f | ls -1 

,它將打印以下(明顯的例子,結果的差異基於什麼設置爲$ DIR

mysript.sh
的Game.exe
的text.txt

通過這一點,我們會得到我們的標準輸出的所有文件的清單在我們的當前目錄。 但是現在我不確定如何將這些文件名一一加入到文件實用程序中以基本獲取我的輸出。

最大的問題是,文件UTIL只能處理1個文件,而不是多個目錄等

,所以我能想到的唯一的事情就是做這樣

FILE_AMOUNT=`find $PWD -type f | ls -1 | wc -l` 
    while [ "$i" -lt "$FILE_AMOUNT" ] 
    do 
     #code here 
     $((i++)) 
     PRINT_TYPE=`file $myfile | cut -d":" -f2` 
    done 

但我不知道如何逐個獲取文件並將它們分配給myfile變量,以便我們可以循環遍歷它們。正如你所看到的,上面的命令會轉儲多個文件名和它們的擴展名,但是我不確定我可以如何一個接一個地將它們分配給我的文件變量。有任何想法嗎?

或者也許有更好的解決方案呢?

+0

查看其他問題:http://stackoverflow.com/questions/42891893/any-idea-why-sort-utility-gives-me-incorrect-results – Attie

回答

1

file命令不會從標準輸入讀取。因此,我們需要通過文件循環,呼籲file對他們中的每一個,並收集彙總關聯數組:

#!/bin/bash 

declare -A file_types 
while read -r file; do 
    type=$(file -b "$file") # -b tells file not to prefix the file name in output 
    ((file_types[$type]++)) 
done < <(find "$PWD" -type f) 

# traverse the associative array and print results 
for type in "${!file_types[@]}"; do 
    printf '%s: %s\n' "$type" "${file_types[$type]}" 
done 

對於我的目錄,它提供了:

VAX COFF executable - version 5424: 1 
VAX COFF executable - version 10614: 1 
VAX COFF executable not stripped: 5 
VAX COFF executable not stripped - version 902: 1 
Perl5 module source text, ASCII text: 7 
VAX COFF executable: 3 
ASCII text: 23 
Perl POD document text, UTF-8 Unicode text: 1 
empty: 2 
Bourne-Again shell script text executable, ASCII text: 2 
VAX COFF executable - version 67: 1 
a /usr/bin/env ruby script text executable, ASCII text: 1 
POSIX shell script text executable, ASCII text: 12 
Git index, version 2, 3 entries: 1 
a /usr/bin/perl -w script text executable, ASCII text: 12 
ASCII text, with very long lines: 2 
Vim swap file, version 7.4: 1 
相關問題