我有一个媒体下载文件夹,其中除了 mp4、avi、mp3 和其他有效媒体文件外,还包含各种不相关的文件,例如 readme、txt 和 torrent 文件。
我想要一个脚本或一组命令,我可以运行它来cron
定期通过或其他方式清理它,并遍历所有目录和子目录删除不需要的文件。
答案1
创建一个文件,其中包含要删除的扩展名,每行一个(例如dontwant.files
):
.txt
.nfo
.torrent
.csv
find
与grep
、xargs
和 相结合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
使用-z
ASCII NUL 字符分隔行,以便输出的每个文件名都find
被视为单独的行。-F
禁用正则表达式匹配,并-f
从文件中读取模式。xargs
with-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 {} +
这里我们使用了find
OR-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
或快捷键组合运行。使用方法很简单:
- 将其复制到空文件中,另存为
clean_up.py
在脚本的头部部分,设置要删除的扩展,在以下行:
remove = [".txt", ".log"]
通过命令运行:
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>