Python 根据文件名中的特定模式移动文件,同时保留文件夹结构

Python 根据文件名中的特定模式移动文件,同时保留文件夹结构,python,bash,perl,find,move,Python,Bash,Perl,Find,Move,我需要将文件名中包含字符串“未知质量”的所有文件及其外部2个文件夹移动到名为“未知”的文件夹中,该文件夹与基本文件夹位于同一目录中。我想补充一点,在基本文件夹中,文件有3个文件夹深,因此在移动匹配的文件时,它应该将$folder1留在基本文件夹中 Unknown_folder base_folder $folder1 $folder2 $folder3 $filename-Unknown Quality.mpk/mp4/avi ############

我需要将文件名中包含字符串“未知质量”的所有文件及其外部2个文件夹移动到名为“未知”的文件夹中,该文件夹与基本文件夹位于同一目录中。我想补充一点,在基本文件夹中,文件有3个文件夹深,因此在移动匹配的文件时,它应该将$folder1留在基本文件夹中

Unknown_folder

base_folder
  $folder1
    $folder2
      $folder3
        $filename-Unknown Quality.mpk/mp4/avi

################### Expected result ###################

Unknown_folder
  $folder2
    $folder3
      $filename-Unknown Quality.mpk/mp4/avi

base_folder
  $folder1
经过一些搜索后,我使用了这个基本的find命令,尽管它不适合我,因为它只是移动与模式和ingores目录结构匹配的文件。正如我在上面移动匹配文件时所解释的,我还需要相对于移动的匹配文件的outer2目录结构

find . -name "*Unknown Quality*" -exec mv "{}" Unknown \;   

希望有人能帮我。我不太确定什么是最好的方法,但是bash、perl、python所有这些都应该很容易实现这一点。请尝试以下方法:

#!/bin/bash

find root -name "*Unknown Quality*" -type f -print0 | while IFS= read -r -d "" f; do
    f2=${f%/*}          # removes the rightmost "/" and following filename
    f2=${f2%/*}         # removes the second rightmost "/" and following dirname
    if [[ -d $f2 ]]; then
                        # consider the case the folder is already removed
        mv -- "$f2" "Unknown_folder"
    fi
done

请注意,上面的代码不考虑在“unNeNNX文件夹”目录中相同的DrIrNe冲突。