批处理文件删除目录中除最大文件之外的所有文件

批处理文件删除目录中除最大文件之外的所有文件

我有一个非常大的文件目录,每个文件都有自己的子目录。这些子目录中有各种质量的视频(1080p、720p……等等)。我只想保留最高质量的视频(因此尺寸最大)。有没有办法通过命令行或批处理文件来做到这一点?

Parent_directory

- Video_A
-- Video_A_1080p
--video_A_720p

-Video_B
-- Video_B_1080p
--video_B_720p
-- Video_B_480p

注意视频文件名不一定包含分辨率,我只是说明目录结构。

结果应该是:

Parent_directory

- Video_A
-- Video_A_1080p

-Video_B
-- Video_B_1080p

答案1

就像是:

for dir in *
do
  cd $dir
  echo rm $(ls -1S | tail -n +2)
  cd ..
done

删除echo它以使其真正发挥作用。先测试一下(在检查您是否有有效的完整备份之前,切勿做这样的事情)!它有各种边缘情况:它假设顶部只有目录,没有文件,并且目录中的文件“正确”命名,即没有空格。并且您也没有数百万个文件,否则命令行将溢出。

ls -1S给出按大小排序的所有文件列表。tail -n +2仅保留列表中从第二行到末尾的所有内容,即删除第一行,即最大的文件。其余部分将被rm删除。

相关内容