.mp4
我在 NAS(网络附加存储)上的一个目录中有大量文件列表。
部分列表如下:
XXXXX_3800.mp4
以及其他类似
XXXXX_8000.mp4
XXXXX
两个文件都相同。
我想自动删除,XXXXX_8000.mp4
但仅当文件XXXXX_3800.mp4
存在时。
我该如何继续?
答案1
- Ctrl按+ Alt+进入终端 T并输入
md bin
- 转到仪表板
- 键入
gedit
并按下Enter - 将以下文本复制粘贴到其中:
#!/bin/bash
#
# This script deletes video files of 8000 bps if and only if the 3800 bps file exists
# as set in http://askubuntu.com/questions/581400/how-to-delete-files-selected-by-rules
#
# Copyright (c) Fabby 2015
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. See the GNU General Public License for more details.
# You DID NOT receive a copy of the GNU General Public License along with this program as the license is bigger than this program.
# Therefore, see http://www.gnu.org/licenses/ for more details.
for szFile in $(ls *3800.mp4)
do
if [ -f ${szFile:0:${#szFile}-8}'8000.mp4' ] ; then
echo "deleting ${szFile:0:${#szFile}-8}8000.mp4..."
rm -f ${szFile:0:${#szFile}-8}'8000.mp4'
fi
done
- 将文件保存在
~/bin/del8000
- 返回终端并输入:
chmod +x ~/bin/del8000
- 在终端类型中:
cd ~/Videos
- 类型
del8000
完毕!
答案2
在单个(平面)目录中
如果所有文件都在同一个目录中,则下面的脚本应该可以完成这项工作。
#!/usr/bin/env python3
import os
import sys
dr = sys.argv[1]; ids = ("_3800.mp4", "_8000.mp4")
checklist = [f[:-9] for f in os.listdir(dr) if f[-9:] in (ids)]
for f in [f for f in set(checklist) if checklist.count(f) != 1]:
os.remove(dr+"/"+f+"_8000.mp4")
怎么运行的:
- 该脚本列出了所有以 或 结尾的文件
_3800.mp4
,_8000.mp4
并删除了它们的后缀 - 如果(剥离的)名称出现两次,则两个版本都存在(因为在同一个目录中不可能有重复的名称)
- 随后,脚本
_8000.mp4
从重复项中删除 - 版本
在分层目录中(递归搜索)
稍微不同的方法。它比较文件递归地并且(仅)在 - 版本存在的_8000.mp4
情况下删除 - 版本_3800.mp4
。
我不确定是否需要递归搜索,但无论如何都添加了它。
怎么运行的:
- 首先列出要保留的文件
- 然后删除可能的“废弃物”,如果要保留的版本存在。
#!/usr/bin/env python3
import os
import sys
files_dir = sys.argv[1]; file_list = []
#---
keep = "_3800.mp4"; rm = "_8000.mp4"
#---
for root, dirs, files in os.walk(files_dir):
for name in files:
if name.endswith(keep):
file_list.append(name)
for name in files:
if name.endswith(rm) and name.replace(rm, keep) in file_list:
os.remove(root+"/"+name)
如何使用
要使用以下任一脚本:
- 将脚本复制到一个空文件中,另存为
clean_directory.py
使用要清理的目录作为参数,通过以下命令运行它:
python3 /path/to/clean_directory.py </path/to/directory/to/clean>