我有以下文件结构:
\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/