根据文件名中的特定模式移动文件,同时保留文件夹结构
Move file according to specific pattern in filename while retaining the folder structure
我需要将文件名中包含字符串“Unknown Quality”的所有文件及其外部 2 个文件夹移动到名为“Unknown”的文件夹中,该文件夹与基本文件夹位于同一目录中。我想在基本文件夹中添加,文件有 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
经过一番搜索,我发现了这个基本的查找命令,尽管它不适合我,因为它只是移动与模式和 ingores 目录结构匹配的文件。正如我上面在移动匹配文件时所解释的那样,我还需要相对于移动的匹配文件的外部 2 目录结构
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
请注意,上面的代码没有考虑目录“Unknown_folder”中相同目录名冲突的情况。
我需要将文件名中包含字符串“Unknown Quality”的所有文件及其外部 2 个文件夹移动到名为“Unknown”的文件夹中,该文件夹与基本文件夹位于同一目录中。我想在基本文件夹中添加,文件有 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
经过一番搜索,我发现了这个基本的查找命令,尽管它不适合我,因为它只是移动与模式和 ingores 目录结构匹配的文件。正如我上面在移动匹配文件时所解释的那样,我还需要相对于移动的匹配文件的外部 2 目录结构
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
请注意,上面的代码没有考虑目录“Unknown_folder”中相同目录名冲突的情况。