【问题标题】:Move file according to specific pattern in filename while retaining the folder structure根据文件名中的特定模式移动文件,同时保留文件夹结构
【发布时间】:2021-02-26 05:05:16
【问题描述】:

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

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 目录结构的文件。正如我在上面移动匹配文件时所解释的那样,我也需要相对于匹配文件移动的外部 2 目录结构

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

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

【问题讨论】:

    标签: python bash perl find move


    【解决方案1】:

    请您尝试以下方法:

    #!/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
    

    请注意,上面的代码没有考虑目录“Unknown_folder”中相同目录名冲突的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多