Python 根据文件名中的特定模式移动文件,同时保留文件夹结构
我需要将文件名中包含字符串“未知质量”的所有文件及其外部2个文件夹移动到名为“未知”的文件夹中,该文件夹与基本文件夹位于同一目录中。我想补充一点,在基本文件夹中,文件有3个文件夹深,因此在移动匹配的文件时,它应该将$folder1留在基本文件夹中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 ############
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冲突。