我有一个媒体下载文件夹,其中包含各种不相关的文件,例如自述文件、txt 和 torrent 文件以及 mp4、avi、mp3 和其他有效媒体文件。
我想要一个脚本或一组命令,我可以运行以cron定期通过或其他方式清除它,并遍历所有目录和子目录,删除不需要的文件。
创建一个包含要删除的扩展名的文件,每行一个(例如,dontwant.files):
.txt
.nfo
.torrent
.csv
Run Code Online (Sandbox Code Playgroud)
结合find带grep,xargs以及rm:
find /path/to/media/directory -type f -print0 |
grep -zFf /path/to/dontwant.files |
xargs -0 rm
Run Code Online (Sandbox Code Playgroud)
find同-type f和-print0将打印出所有找到由ASCII NULL字符分隔的文件的名称-唯一一个是划定的路径和文件名万无一失。grepwith 用-zASCII NUL 字符分隔行,因此每个输出的文件名find都被视为单独的行。-F禁用正则表达式匹配,并-f从文件中读取模式。xargs与-0读取中的行分离由ASCII NULL字符,并且使用它们作为用于命令的参数,在这种情况下rm。这很容易转换为另一种方法(删除除一些扩展之外的所有内容)。例如,对于像 的文件want.files,包含:
.mp4
.srt
.avi
.mp3
Run Code Online (Sandbox Code Playgroud)
只有grep命令需要更改,-v用于否定匹配:
grep -vzFf /path/to/want.files |
Run Code Online (Sandbox Code Playgroud)