Bash 根据文件名将文件移动到相应的文件夹
我在整理文件方面有点问题 因此,我有大约3000部电影的名字如下,因为有多部电影是相同的,但有不同的分辨率。以下是一个示例:Bash 根据文件名将文件移动到相应的文件夹,bash,Bash,我在整理文件方面有点问题 因此,我有大约3000部电影的名字如下,因为有多部电影是相同的,但有不同的分辨率。以下是一个示例: Toy Story 4 (2019) - 720p h265 10 AAC 6ch.mkv Toy Story 4 (2019) - 1080p h265 10 AAC 6ch.mkv Toy Story 4 (2019) - 2160p h265 10 AAC 6ch.mkv X Men Apocalypse (2016) - 1080p h265 10 AAC 8ch
Toy Story 4 (2019) - 720p h265 10 AAC 6ch.mkv
Toy Story 4 (2019) - 1080p h265 10 AAC 6ch.mkv
Toy Story 4 (2019) - 2160p h265 10 AAC 6ch.mkv
X Men Apocalypse (2016) - 1080p h265 10 AAC 8ch.mkv
X Men Apocalypse (2016) - 720p h265 10 AAC 8ch.mp4
我想要的是将所有普通电影移动到一个普通文件夹中。像这样
Toy Story 4 (2019)
Toy Story 4 (2019) - 720p h265 10 AAC 6ch.mkv
Toy Story 4 (2019) - 1080p h265 10 AAC 6ch.mkv
Toy Story 4 (2019) - 2160p h265 10 AAC 6ch.mkv
X Men Apocalypse (2016)
X Men Apocalypse (2016) - 1080p h265 10 AAC 8ch.mkv
X Men Apocalypse (2016) - 720p h265 10 AAC 8ch.mp4
我所有的电影都是这样命名的
我以前也遇到过类似的问题,问题解决了-
所以我尝试了同样的解决方案,不幸的是,它根本不起作用
我犯了这个错误
“$'\r': command not found”
非常感谢您的帮助
Ps:我也试过像Tinymediamanager这样的软件,但是它只能移动一部电影,而不是所有的电影,所以我找到了解决方案 在我上一篇文章中..一个用户给了我另一个bash脚本以用于任何其他实例..但是当我运行它时给了我错误..因为它不是UNIX格式..我使用Notepad++来更改格式,唉!。。它起作用了 谢谢大家的建议,谢谢大家 这是解决办法
#!/usr/bin/env bash
declare -A uniq
for files in *; do
if [[ $files =~ ^(.*\(?[[:digit:]]{4}\)?)[\.[[:blank:]]]?(.+)$ ]]; then
no_space=${BASH_REMATCH[1]// /.}
uniq[$no_space]=1
all_files+=("${BASH_REMATCH[0]}")
first_part+=("${BASH_REMATCH[1]}")
fi
done
for j in "${!uniq[@]}"; do
mkdir -p "${j//[)(]}"
dir+=("$j")
done
for i in "${!all_files[@]}"; do
for k in "${dir[@]}"; do
if [[ ${first_part[$i]// /.} == $k ]]; then
mv -v "${all_files[$i]}" "${k//[)(]}"
fi
done
done
在文件所在的文件夹中运行此命令
这是来自我建议,除非你出于某种原因需要增加复杂性,否则尽量简单 代码速度较慢,效率较低,但如果单独编写,则更易于阅读
for f in *.mkv
do d="${f% - *}"
mkdir -p "$d"
mv "$f" "$d/"
done
如果你想加速的话-
for f in *.mkv
do [[ -e "$f" ]] || continue
d="${f% - *}"
mkdir -p "$d/"
mv "$d"*.mkv "$d"
done
这难道不能实现您想要的吗?我很困惑,您链接的问题在代码中有
python-3.x
、linux
、windows
、bash
和powershell
标记和一个批处理文件
。您接受了bash
答案。在这里,您在标记中执行相同的bash
,python
powershell
和批处理文件
,而没有任何代码,使这个问题完全脱离主题。很抱歉,我对堆栈溢出非常陌生,我将尝试添加我使用的代码,并尝试更具体。谢谢您的编辑,我将撤回我的投票结果,同时请指出您对当前脚本存在的问题,因为“根本不起作用”并不表示存在实际问题。$'\r'是windows CR字符。看起来你的脚本不知怎么接触了windows系统并被转换了。使用
dos2unix myScript`取消插入。在任何情况下,运行cmd都没有坏处。如果这还不能解决问题,请将该信息添加到Q的正文中(可能在顶部附近)。祝你好运,谢谢!这救了我…我将bas转换成UNIX并运行了它,唉!非常好,谢谢你,保罗·霍奇斯,我会试试这个,让你知道
for f in *.mkv
do [[ -e "$f" ]] || continue
d="${f% - *}"
mkdir -p "$d/"
mv "$d"*.mkv "$d"
done