我有成千上萬的文件沒有擴展後恢復(主要是圖片)。我需要按文件類型將它們分類到不同的文件夾中(文件夾必須在排序過程中創建)。我可以使用「file」命令確定linux中的文件類型。有人有bash腳本嗎?如何通過bash上的文件類型(使用'文件'命令)將文件分類到文件夾中?
例如:初始目錄包含文件:001,002,003,004。排序後應該是3個目錄: 'jpeg'包含001.jpg,003.jpg; 「TIFF」包含002.tiff和「其他」包含004
我有成千上萬的文件沒有擴展後恢復(主要是圖片)。我需要按文件類型將它們分類到不同的文件夾中(文件夾必須在排序過程中創建)。我可以使用「file」命令確定linux中的文件類型。有人有bash腳本嗎?如何通過bash上的文件類型(使用'文件'命令)將文件分類到文件夾中?
例如:初始目錄包含文件:001,002,003,004。排序後應該是3個目錄: 'jpeg'包含001.jpg,003.jpg; 「TIFF」包含002.tiff和「其他」包含004
此答案不爲每個文件,這是不必要的
file -N --mime-type -F"-&-" * | awk -F"-&-" 'BEGIN{q="\047"}
{
o=$1
gsub("/","_",$2);sub("^ +","",$2)
if (!($2 in dir)) {
dir[$2]
cmd="mkdir -p "$2
print cmd
#system(cmd) #uncomment to use
}
files[o]=$2
}
END{
for(f in files){
cmd="cp "q f q" "q files[f]"/"f".jpg" q
print cmd
#system(cmd) #uncomment to use
}
}'
類似地執行file
命令多次,可以使用關聯數組bash4 +腳本來完成。
怎麼是這樣的:
mkdir -p `file -b --mime-type *|uniq`
for x in `ls`
do
cp $x `file -b --mime-type $x`
done
我用的CP,它無法與目錄工作。
Dadam的回答調整:
#!/bin/bash
file --mime-type -F"&" [YOUR PATH]/* > filetypes.txt
mkdir -p `cut -f2 -d"&" filetypes.txt | sed 's/[ ,:]//g' | sort -u`
for x in `cut -f1 -d"&" filetypes.txt`
do
mv $x `file -b --mime-type $x | sed 's/[ ,:]//g'`
done
我用這個和它的作品對我來說:
#!/bin/bash
self_name=`basename "$0"`
for f in *
do
if [ -f "$f" ] && [ "$f" != "$self_name" ]; then
filename="${f%.*}"
ext="${f##*.}"
mkdir $ext
mv "$f" "$ext/$f"
htmlfiles="{$f}_files"
if [ -d "$htmlfiles" ];then
mv "$htmlfiles" "$ext/$htmlfiles"
fi
if [ $? -ne 0 ]
then
echo "Error: Failed mv $f"
fi
fi
if [ -d "$f" ];then
mv "$f" "$ext/$f"
fi
done
你應該把它放在你的目錄並運行它,它使一個子目錄延期
你是對的,謝謝你,但也有一些缺點(見調整)。 – hoxnox 2010-10-10 22:54:39
無用ls' – ghostdog74 2010-10-10 23:29:23
我該如何消除它? – 2010-10-11 09:38:21