簡體   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