[英]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.