由于旧的备份概念,我这里有一些硬盘驱动器,其中包含如下文件结构:
/1.1
/2.1
/3.1
/FOLDER.DUPLICATE.$DRIVEBENDER/1.1
/FOLDER.DUPLICATE.$DRIVEBENDER/3.1
/FOLDER.DUPLICATE.$DRIVEBENDER/4.1
/Subfolder/1.2
/Subfolder/FOLDER.DUPLICATE.$DRIVEBENDER/2.2
/Subfolder/FOLDER.DUPLICATE.$DRIVEBENDER/3.2
结果应等于原始结构,因此名为的文件夹中的所有文件FOLDER.DUPLICATE.$DRIVEBENDER
应向上移动一级。如果存在更高一级的文件,则应以较大的文件为准。
答案1
FOLDER.DUPLICATE.$DRIVEBENDER
假设您在其他目录中没有目录FOLDER.DUPLICATE.$DRIVEBENDER
,您可以执行以下操作:
find . -path '*/FOLDER.DUPLICATE.$DRIVEBENDER/*' -prune -type f -print0 |
perl -0lne '
if (m{(.*)/FOLDER.DUPLICATE.\$DRIVEBENDER/(.*)}s) {
$upperfile = "$1/$2";
if (-s > -s $upperfile) {
rename $_, $upperfile or warn "rename $_: $!\n";
} else {
unlink $_ or warn "unlink $_: $!\n";
}
}'
(如果您find
不支持-print0
,可以替换为-exec printf '%s\0' {} +
)。