フォルダ名が「somestring」と等しい場合は、フォルダ内のすべてのファイルを1レベル上に移動します。

フォルダ名が「somestring」と等しい場合は、フォルダ内のすべてのファイルを1レベル上に移動します。

古いバックアップの概念のため、ここには次のファイル構造を持つハードドライブがあります。

/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

結果は元の構造と同じである必要があるため、名前付きフォルダ内のすべてのファイルを1レベル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' {} +。)

おすすめ記事