【发布时间】:2011-04-23 13:21:33
【问题描述】:
恢复后我有数千个没有扩展名的文件(主要是图片)。我需要按文件类型将它们分类到单独的文件夹中(文件夹必须在分类过程中创建)。我可以使用“文件”命令确定 linux 中的文件类型。有人有 bash 脚本吗?
例如:初始目录包含文件:001、002、003、004。排序后应该是3个目录: 'jpeg' 包含 001.jpg、003.jpg; 'tiff' 包含 002.tiff 和 'others' 包含 004。
【问题讨论】:
恢复后我有数千个没有扩展名的文件(主要是图片)。我需要按文件类型将它们分类到单独的文件夹中(文件夹必须在分类过程中创建)。我可以使用“文件”命令确定 linux 中的文件类型。有人有 bash 脚本吗?
例如:初始目录包含文件:001、002、003、004。排序后应该是3个目录: 'jpeg' 包含 001.jpg、003.jpg; 'tiff' 包含 002.tiff 和 'others' 包含 004。
【问题讨论】:
爸爸的答案调整:
#!/bin/bash
file --mime-type -F"&" [YOUR PATH]/* > filetypes.txt
mkdir -p `cut -f2 -d"&" filetypes.txt | sed 's/[ ,:]//g' | sort -u`
IFS=$'\n'
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
你应该把它放在你的目录中并运行它,它会为扩展创建一个子目录
【讨论】:
这个答案不会对每个文件多次执行file命令,这是不必要的
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
}
}'
类似地,可以通过使用关联数组的 bash4+ 脚本来完成。
【讨论】:
这样的事情怎么样:
mkdir -p `file -b --mime-type *|uniq`
for x in `ls`
do
cp $x `file -b --mime-type $x`
done
我使用 cp,它不能与目录一起使用。
【讨论】:
for x in *