如何删除按规则选择的文件?

如何删除按规则选择的文件?

.mp4我在 NAS(网络附加存储)上的一个目录中有大量文件列表。

部分列表如下:

XXXXX_3800.mp4

以及其他类似

XXXXX_8000.mp4

XXXXX两个文件都相同。

我想自动删除,XXXXX_8000.mp4但仅当文件XXXXX_3800.mp4存在时。

我该如何继续?

答案1

  1. Ctrl按+ Alt+进入终端 T并输入md bin
  2. 转到仪表板
  3. 键入gedit并按下Enter
  4. 将以下文本复制粘贴到其中:
    #!/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
  1. 将文件保存在~/bin/del8000
  2. 返回终端并输入:chmod +x ~/bin/del8000
  3. 在终端类型中:cd ~/Videos
  4. 类型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)


如何使用

要使用以下任一脚本:

  1. 将脚本复制到一个空文件中,另存为clean_directory.py
  2. 使用要清理的目录作为参数,通过以下命令运行它:

    python3 /path/to/clean_directory.py </path/to/directory/to/clean>
    

相关内容