複数のディレクトリから最大のファイルを除くすべてを削除

複数のディレクトリから最大のファイルを除くすべてを削除

複数のサブディレクトリがあり、/home/usr/ProjZ/programs/各ディレクトリには複数(または1つ).jsのファイルが含まれています。

私がしなければならないのは、.jsサブディレクトリに複数のファイルが含まれている場合は最大ファイルを除くすべてのファイルを削除し、サブ.jsディレクトリにファイルが1つしか含まれていない場合は何もしません。

どうすればいいですか?

ベストアンサー1

そしてzsh

for dir (/home/usr/ProjZ/programs/*(/)) rm -f $dir/*.js(.NOL[2,-1])

最大のファイルが複数ある場合は、1 つだけアーカイブされます。どちらが現在のディレクトリに表示される順序によって異なります(通常はややランダムです)。

GNUly(最近のGNU sedfor -z)に対応する内容は次のとおりです。

for dir in /home/usr/ProjZ/programs/*; do
  [ -d "$dir" && ! -L "$dir" ] || continue
  find "$dir" -type f -printf '%s:%p\0' | sort -rzn |
    sed -z '1d;s/[^:]*://' | xargs -r0 rm -f
done

おすすめ記事