我是一个完全的新手,但我想出了以下脚本来完成以下操作:
我有一个名为“unrar”的文件夹,在其中有未知文件夹名称的子文件夹,里面包含rar文件。 现在我进入unknownsubfolder,找到rar文件并在unknownsubfolder中解压它。 之后,我找到新文件并将其重命名为unknownsubfoldername。现在我抓取该文件并将其移动到./unrar。
#!/bin/bash
cd /home/user/unrar/
for dir in /home/user/unrar/*;
do (cd "$dir" && find -name "*.rar" -execdir unrar e -r '{}' \;); done
echo "$(tput setaf 2)-> unrar done!$(tput sgr0)"
for dir in /home/user/unrar/*;
do (cd "$dir" && find -name "*.mkv" -exec mv '{}' "${PWD##*\/}.mkv" \;); done
for dir in /home/user/unrar/*;
do (cd "$dir" && find -name "*.mp4" -exec mv '{}' "${PWD##*\/}.mp4" \;); done
for dir in /home/user/unrar/*;
do (cd "$dir" && find -name "*.avi" -exec mv '{}' "${PWD##*\/}.avi" \;); done
cd /home/user/unrar
find -name "*.mkv" -exec mv '{}' /home/user/unrar \;
find -name "*.mp4" -exec mv '{}' /home/user/unrar \;
find -name "*.avi" -exec mv '{}' /home/user/unrar \;
大多数情况下,这个方法可以很好地运作,但在某些情况下可能会出现问题。
我想要在目录中查找*.rar文件并解压缩它。新文件(.mkv|.avi|.mp4)应该被重命名为DIR(.mkv|.avi|.mp4),并移动到./unrar目录下。
这是我的文件结构。
./unrar/
- unknownsubfolder/
-file.rar
-file.r00
-....
- unknownsubfolder1/
- s01/
- file.rar
- file.r00
- ....
- s02/
- file.rar
- file.r00
- ....
- ....
如果是情况1,解压"/unknownsubfolder/file.rar"并获取"x.mkv"。该文件从"x.mkv"重命名为"unknwonsubfolder.mkv",然后移动到"./unrar/unknownsubfolder.mkv"(*.avi + *.mp4同理)==完美。
如果是情况2,在我的脚本中,将解压未知子文件夹/s01/file.rar,但不会将其重命名为s01.mkv,而是改为unknwonsubfolder1.mkv。(如果还有s02、s03、s04等),我总是会在./unrar中得到一个unknownsubfolder.mkv文件)==输出错误。
因此,我想问三个问题:
1. 如何获取正确的DIRname以便重命名文件?或者如何输入未知子目录/s01....?
2. 是否有一种方法可以从查找结果中排除某个单词?有时候"unknownsubfolder"中包含另一个文件夹+文件,称为"sample(.mkv|.avi|.mp4)"。我想要排除它,以防止原始文件被样例文件覆盖。这种情况有时会发生。
3. 我相信我可以组合一些代码,使它变得更短。有人能解释一下吗?我如何将mkv、avi和mp4组合成一行。
谢谢,祝好,wombat
(编辑:为了更好的理解)
subfolder1-30
的文件夹。那些子文件夹里面是否仍然只包含一个单独的rar文件? - user4918296