簡體   English   中英

Bash 腳本按類型復制文件

[英]Bash script to copy file by type

如何根據文件類型使用file命令復制目錄中的文件? 我知道我可以使用file來查找文件的類型,但我不知道如何在if條件下使用它。

我想要達到的就是這個。 我需要整理我的下載文件夾。 當我運行特定腳本時,我希望將上述文件夾中的文件根據其類型移動到專用文件夾中。 例如,應該將圖像文件移動到名為“Images”的文件夾,將視頻文件移動到“Videos”,將可執行文件移動到“Programs”等等。

像這樣的東西?

for filename in ./*; do
    case $(file -b -i "$filename") in
        inode/directory* | inode/symlink*)
            echo "$0: skip $filename" >&2
            continue;;
        application/*) dest=Random;;
        image/*) dest=Images;;
        text/html*) dest=Webpages;;
        text/plain*) dest=Documents;;
        video/*) dest=Videos;;
        *) dest=Unknown;;
    esac
    mkdir -p "$dest"
    mv "$filename" "$dest/"
done

MIME 類型( -i選項)到目錄層次結構的映射並不完全簡單。 application MIME 類型層次結構尤其對應於大量文檔類型(PDF、Excel 等)——其中一些也具有指定類型——以及完全未指定的通用application/octet-stream 使用 MIME 類型以外的其他內容通常會帶來更大的問題,因為file打印的標簽是自由格式的人類可讀文本,基本上可以是隨機的(例如,相同文件格式的不同版本可能對應於具有不同標簽的不同檢測,沒有系統地格式化,因此您可能會從一個文件中獲得Evil Empire Insult (tm) format 1997 ,而從另一個具有相同擴展名的文件中獲得Insult 2000 )。

可能使用file -i./*進行測試運行並檢查您獲得的結果,然后使用對您的特定文件真正有意義的案例更新上面的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM