BASH 脚本,用于按基本文件名将文件递归排序到同名文件夹中

标签 bash shell scripting file directory

我有以下文件结构:

\HI

  • ActionPotential_hi.mp4
  • ADHD_hi.mp4
  • 阿尔茨海默病_hi.mp4
  • alzheimers_art_hi.mp4
  • artificial_eye_hi.mp4
  • 更多文件 ...

\LO

  • ActionPotential_lo.mp4
  • ADHD_lo.mp4
  • 阿尔茨海默病_lo.mp4
  • alzheimers_art_lo.mp4
  • artificial_eye_lo.mp4
  • 等等

\MED

*基本文件名*_med.mp4

\STILLS

*基本文件名*_med.jpg

\标题

*基本文件名*.adb.xml

\转录

*基本文件名*.txt

为了将它们摄取到 MarkLogic 环境中,我需要将它们重新排列成以下结构,其中 asset 是基本文件名。

\ Assets

  • asset_lo.mp4
  • asset_med.mp4
  • asset_hi.mp4
  • Assets .txt
  • asset.adb.xml
  • asset_med.jpg

我想要一个 bash 脚本来帮我解决这些问题。有什么建议吗?

最佳答案

find . -type f -print |
while read -r pathname; do
    filename=${pathname##*/}
    case "$filename" in
        *_hi* | *_med* | *_lo*)
            # strip off last underscore and following chars
            new_dirname=${filename%_*} 
            ;;
        *)
            # strip off first dot and following chars
            new_dirname=${filename%%.*} 
            ;;
    esac
    mkdir -p "../$new_dirname"
    echo mv "$pathname" "../$new_dirname/$filename"
done 

未经测试。当您对 mv 命令看起来正确时,删除 echo

我将目标目录移至 CWD 的父目录,因为我不确定 find 是否会选取新创建的目录。有人可以解决这个问题吗?

关于BASH 脚本,用于按基本文件名将文件递归排序到同名文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5965651/

相关文章:

bash - 使用getopts处理长和短命令行选项

python - 如何通过Python在Windows 10上使用Unix?

Linux Shell 脚本 - 带通配符的字符串比较

shell - diff 文件名在每行前

javascript - 我可以从 "NIL"的 JavaScript 知识开始使用 jQuery(或 Node.js)吗?

linux - Bash shell - : Command

linux - AWK/SED 附加到日志文件

linux - 运行脚本来检查磁盘使用情况会创建一个新文件。为什么?

linux - 如何为安装程序编写 "yes"响应脚本?

charts - QLikVIew 对另一个计算维度中的计算维度的引用