繁体   English   中英

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

[英]BASH script for sorting files recursively by base filename into folders of the same name

我具有以下文件结构:

\\ HI

  • ActionPotential_hi.mp4
  • ADHD_hi.mp4
  • AlzheimersDisease_hi.mp4
  • alzheimers_art_hi.mp4
  • artificial_eye_hi.mp4
  • 更多文件 ...

\\ LO

  • ActionPotential_lo.mp4
  • ADHD_lo.mp4
  • AlzheimersDisease_lo.mp4
  • alzheimers_art_lo.mp4
  • artificial_eye_lo.mp4
  • 等等

\\ MED

* base_filename * _med.mp4

\\剧照

* base_filename * _med.jpg

\\ CAPTIONS

* base_filename * .adb.xml

\\ TRANSCRIPTS

* base_filename * .TXT

为了将它们吸收到MarkLogic环境中,我需要将它们重新排列为以下结构,其中资产是基本文件名。

\\ ASSET

  • asset_lo.mp4
  • asset_med.mp4
  • asset_hi.mp4
  • asset.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是否会选择新创建的目录。 有人可以解决这一点吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM