用于清除媒体文件夹中不需要的文件类型的命令或脚本

用于清除媒体文件夹中不需要的文件类型的命令或脚本

我有一个媒体下载文件夹,其中除了 mp4、avi、mp3 和其他有效媒体文件外,还包含各种不相关的文件,例如 readme、txt 和 torrent 文件。

我想要一个脚本或一组命令,我可以运行它来cron定期通过或其他方式清理它,并遍历所有目录和子目录删除不需要的文件。

答案1

创建一个文件,其中包含要删除的扩展名,每行一个(例如dontwant.files):

.txt
.nfo
.torrent
.csv

findgrepxargs和 相结合rm

find /path/to/media/directory -type f -print0 |
  grep -zFf /path/to/dontwant.files |
  xargs -0 rm
  • find使用-type f并将-print0打印出它找到的所有文件的名称,并以 ASCII NUL 字符分隔 - 这是唯一一种完全安全的分隔路径和文件名的字符。
  • grep使用-zASCII NUL 字符分隔行,以便输出的每个文件名都find被视为单独的行。-F禁用正则表达式匹配,并-f从文件中读取模式。
  • xargswith-0读取由 ASCII NUL 字符分隔的行,并将它们用作命令的参数,在本例中为rm

这很容易转换为另一种方法(删除除部分扩展名之外的所有扩展名)。例如,对于want.files包含以下内容的文件:

.mp4
.srt
.avi
.mp3

grep命令需要改变,用来-v否定匹配:

grep -vzFf /path/to/want.files |

答案2

根据我们目前从您的问题中得到的信息:

查找并删除:

如果要删除所有具有.txt.torrent扩展名的文件:

find /path/to/dir -type f \( -name '*.txt' -o -name '*.torrent' \) -execdir rm {} +

或者,如果您想删除所有没有.mp3.mp4.avi扩展名的文件:

find /path/to/dir -type f -not \( -name '*.mp3' -o -name '*.mp4' -o -name '*.avi' \) -execdir rm {} +

这里我们使用了findOR-o选项来获取我们想要的文件,当我们找到文件时,我们通过调用 的单个实例将其删除rm

计划任务:

如果您想将其作为cron作业运行,则可以将命令放在用户crontab条目中,并指定cron运行时间。例如,每周日晚上 11:00 运行此命令:

00 23 * * 0 find /path/to/dir -type f \( -name '*.txt' -o -name '*.torrent' \) -execdir rm {} +

答案3

下面的脚本会递归清理您的目录。它可以通过cron或快捷键组合运行。使用方法很简单:

  1. 将其复制到空文件中,另存为clean_up.py
  2. 在脚本的头部部分,设置要删除的扩展,在以下行:

    remove = [".txt", ".log"]
    
  3. 通过命令运行:

    python3 /path/to/clean_up.py <directory_to_clean_up>
    

剧本:

#!/usr/bin/env python3
import os
import sys

#--- set the extensions to remove below
remove = [".txt", ".log"]
#---

for root, dirs, files in os.walk(sys.argv[1]):
    for file in files:
        file = os.path.join(root, file)
        if any([file.endswith(s) for s in remove]):
            os.remove(file)

负面选择

如果你想反过来做:只有保持特定的文件类型(扩展名),删除所有其他文件类型,使用以下脚本(版本):

#!/usr/bin/env python3
import os
import sys

#--- add all extensions you'd like to keep below
keep = [".mp4", ".mp3"]
#---

for root, dirs, files in os.walk(sys.argv[1]):
    for file in files:
        file = os.path.join(root, file)
        if all([not file.endswith(s) for s in keep]):
            os.remove(file)

要将上述任一脚本添加到快捷方式:选择:系统设置 > “键盘” > “快捷方式” > “自定义快捷方式”。单击“+”并添加命令:

python3 /path/to/clean_up.py <directory_to_clean_up>

相关内容