查找命令排除多个目录和多个文件扩展名

查找命令排除多个目录和多个文件扩展名

我有一个包含很多文件和文件夹的文件夹。它包含许多多媒体文件(jpg、jpeg、mp4、mpeg)。该目录还包含许多子文件夹。

我想做两件事:

  1. 查找所有文件的总数

  2. 查找文件和文件夹使用的总大小。

我想排除带有某些特定扩展名的文件,例如排除 mp4、jpeg 文件。我还想排除一系列文件夹。假设我有 1000 个文件和 200 个文件夹。在这些文件中,我想排除带有某些特定扩展名的文件和一些文件夹。例如,如果我有 26 个名为 az 的文件夹,我想排除名为 h、f、y 等的文件夹。

存在的文件总数及其占用大小的最终输出不应包含这些文件和文件夹。

我已经尽力了,90% 已完成,该命令排除了所有存在的文件和目录,但它也打印了文件夹名称,我只想要输出中的文件名。

find . -type d \( -path "*/Make-Directory-Script-master" -o -path "*/pycharm-community-2020.3" \) -prune  -o -type f \( -name "*.zip"  -o -name "*.pdf" -o -name "*.js" -o -name "*.json" -o -name "*.css" -o -name "*.srt" \) -prune -o  -print

任何帮助将不胜感激

答案1

-type f只需在final之前添加一个-print

命令看起来像(为了可读性而折叠)

find . -type d \( -path "*/Make-Directory-Script-master" -o -path "*/pycharm-community-2020.3" \) -prune  
    -o -type f \( -name "*.zip"  -o -name "*.pdf" -o -name "*.js" -o -name "*.json" -o -name "*.css" -o -name "*.srt" \) -prune 
    -o -type f -print

原始命令(删节并编号行)

#1  find . -type d \( -path ... \) -prune  
#2    -o -type f \( -name ... \) -prune 
#3    -o -print
  • 在第 1 行中,您从列表中选择路径-prune(即停止查找),以查找整个第 1 行“ \(..\) -prune”评估为 true,因此从输出中跳过路径匹配模式。
  • 在第 2 行中,使用或者连词 ( -o) 您过滤掉了扩展名列表并从输出中跳过了它们。
  • 在第 3 行中使用最后一个或,而不-type f打印任何剩余路径,无论是文件名还是目录名。

相关内容