根据“文件”输出将文件排序到文件夹中

根据“文件”输出将文件排序到文件夹中

我有数百万个没有扩展名的文件,我想将它们分类到不同的文件夹中。我能够通过“文件”来识别文件,但最终我会得到许多可以手动处理的不同类型。我想使用“文件”的输出来 grep 即“Word”,然后将其移动到“office”文件夹中。我可以为单个文件类型编写它,但不能为我拥有的所有文件类型编写。如果那样我就缺少条件。我正在使用cygwin。任何人都可以帮助我告诉我如何做到这一点?谢谢你!

彼得

答案1

grep您可以在 shell case 构造中使用简单的模式匹配来代替。例如:

#!/bin/sh

for f in *; do 

  [ -f "$f" ] || continue

  ftype="$(file -b -- "$f")"

  case $ftype in 
    *"shell script"*)
      echo mv -- "$f" scripts/
      ;;
    *"C source"*|*"C++ source"*) 
      echo mv -- "$f" src/
      ;;

    .
    .
    .

    *) printf '%s: skipping unrecognized type "%s"\n' "$f" "$ftype" >&2
      ;; 
  esac

done

目标目录必须存在(尽管使用 条件创建它们会很简单mkdir -p)。echo一旦您确信它做了正确的事情,就删除es。

相关内容