如果文件夹名称等于“somestring”,则将文件夹中的所有文件向上移动一级

如果文件夹名称等于“somestring”,则将文件夹中的所有文件向上移动一级

由于旧的备份概念,我这里有一些硬盘驱动器,其中包含如下文件结构:

/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' {} +)。

相关内容