Как удалить файлы, выбранные правилами?

У меня есть большой список .mp4 файлы в одном каталоге на NAS (Сетевое хранилище данных).

Некоторые перечислены следующим образом:

XXXXX_3800.mp4

и другой как

XXXXX_8000.mp4

XXXXX то же для обоих файлов.

Я хотел бы автоматизировать, удаляют XXXXX_8000.mp4 но ТОЛЬКО ЕСЛИ файл XXXXX_3800.mp4 существует.

Как я должен продолжить двигаться?

2
задан 9 February 2015 в 01:27

2 ответа

  1. Переходят к терминалу путем нажатия Ctrl + Высокий звук + T , и тип md bin
  2. Переходят к типу gedit тире
  3. , и нажатие Входят Копия
  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

!

4
ответ дан 6 October 2019 в 02:28

В единственном (плоском) каталоге

Если все файлы находятся в одном и том же каталоге, сценарий ниже должен сделать задание.

#!/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 - версия существует.
Я не был уверен, что была потребность в рекурсивном поиске, но добавила его так или иначе.

Как это работает:

  • Сначала перечислите файлы для хранения так или иначе
  • Затем удалите возможный "бросок aways", если version-keep существует.
#!/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>
    
1
ответ дан 2 December 2019 в 01:59

Другие вопросы по тегам:

Похожие вопросы: