繁体   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