我有成千上万的文件没有扩展后恢复(主要是图片)。我需要按文件类型将它们分类到不同的文件夹中(文件夹必须在排序过程中创建)。我可以使用“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