Как удалить файлы видеоклипов

Обновлено: 07.07.2024

Привет, коллеги, это моя первая статья на хабре, просьба отнестись с пониманием.

Допустим, у Вас на компьютере скопилось большое количество видеофайлов, и Вы хотите навести порядок, то есть удалить ненужные. Самое очевидное решение не является самым удобным — открыть папку и ориентироваться на названия. Это не всегда работает, например, в случае серий с сериалами, когда хочется что-то удалить, что-то оставить. Придётся открывать каждый файл, и только после закрытия видеоплеера удалять. Неудобно.

Тут на помощь приходит смекалка и PowerShell, извиняюсь перед всеми пользователями Linux… хотя на Linux безусловно тоже можно будет придумать нечто подобное.

Основная идея заключается в следующем — открываем файл в видеоплеере, и если его нужно удалить, запускаем bat-файл, который удаляет предыдущий открытый файл, и помечает на удаление текущий открытый файл. Под помечанием на удаление имеется ввиду запись полного пути текущего файла в текстовый файл. Сразу открытый файл удалить нельзя, так как он занят видеоплеером, и не всегда на чтение.

Установить Media Pleer Classic, например отсюда

В настройках установить отображение полного пути проигрываемого файла, пункт меню «Проигрыватель -> В заголовке отображать -> Полный путь». Скриншот настройки.

Разрешить выполнение PowerShell скриптов. Не думаю, что это будет большой проблемой, речь наверное всё-таки о персональных ПК, не о серверах.

Команда, разрешающая безусловное выполнение всех PowerShell-скриптов — «Set-ExecutionPolicy Unrestricted». Открываем консоль PowerShell под правами администратора, вводим эту команду. Подробнее например здесь.

Думаю, есть более безопасный способ, который позволит выполнять не все ps1-файлы, а только определённый, но я так глубоко не копал. Кто знает, буду благодарен за комментарий к публикации.

Вот сам PowerShell-скрипт:


Он делает следующее:

  1. Удаляет в корзину файл, записанный первой строкой текстового файла C:\Temp\delete.txt
  2. Перезаписывает в C:\Temp\delete.txt заголовок окна процесса mpc-hc64, то есть нашего видеоплеера из пункта 1

Создать bat-файл со следующей командой:


где файл ps1 это наш скрипт

Пункт 6, но это кому как удобно

Вывести нажатие bat-файла на панель задач, у меня например так

Теперь, когда Вы запускаете файл в видеоплеере, если Вы видите, что файл Вам уже неинтересен, просто нажимаете кнопочку на панели задач, и он гарантированно будет удалён в корзину со следующим нажатием.

В iTunes на ПК можно удалять песни, фильмы, телешоу и другой контент. Вы можете удалить объекты из медиатеки или с компьютера.

Удаление песен и альбомов


В приложении iTunes на ПК выберите «Музыка» в раскрывающемся меню в левом верхнем углу, затем нажмите «Медиатека».

Нажмите объект, чтобы выбрать его, затем нажмите клавишу Delete.

Нажмите «Удалить [объект]».

Выполните одно из следующих действий.

Как удалить объект только из медиатеки iTunes. Нажмите «Оставить файл».

Как удалить объект с компьютера. Нажмите «Удалить». Объект удаляется при следующей очистке Корзины.

Примечание. Если песня была сразу удалена из медиатеки (Вам не было предложено оставить файл или переместить его в корзину), можно заново добавить и загрузить эту песню из Apple Music.

Если у Вас есть доступ к медиатеке iTunes на нескольких устройствах, то при удалении песен из медиатеки они остаются доступны в iCloud, и Вы можете воспроизвести или загрузить их в любое время.

Если песню не удается удалить, убедитесь, что Вы не пытаетесь удалить песню из смарт-плейлиста при включении функции «Оперативное обновление».

Удаление фильмов и телешоу


В приложении iTunes на ПК выберите «Фильмы» или «Телешоу» в раскрывающемся меню в левом верхнем углу, затем нажмите «Медиатека».

Нажмите объект, чтобы выбрать его, затем нажмите клавишу Delete.

Нажмите «Удалить [объект]».

Выполните одно из следующих действий.

Как удалить объект только из медиатеки iTunes. Нажмите «Оставить файл».

Как удалить объект с компьютера. Нажмите «Удалить». Объект удаляется при следующей очистке Корзины.

Можно скрыть объекты, которые не загружены в медиатеку iTunes. (Чтобы снова добавить объекты в медиатеку, их можно загрузить повторно.)



Феерическая расстановка точек над i в вопросе удаления файлов из переполненной директории.

Прочитал статью Необычное переполнение жесткого диска или как удалить миллионы файлов из одной папки и очень удивился. Неужели в стандартном инструментарии Linux нет простых средств для работы с переполненными директориями и необходимо прибегать к столь низкоуровневым способам, как вызов getdents() напрямую.

Для тех, кто не в курсе проблемы, краткое описание: если вы случайно создали в одной директории огромное количество файлов без иерархии — т.е. от 5 млн файлов, лежащих в одной единственной плоской директории, то быстро удалить их не получится. Кроме того, не все утилиты в linux могут это сделать в принципе — либо будут сильно нагружать процессор/HDD, либо займут очень много памяти.

Так что я выделил время, организовал тестовый полигон и попробовал различные средства, как предложенные в комментариях, так и найденные в различных статьях и свои собственные.

Подготовка

Так как создавать переполненную директорию на своём HDD рабочего компьютера, потом мучиться с её удалением ну никак не хочется, создадим виртуальную ФС в отдельном файле и примонтируем её через loop-устройство. К счастью, в Linux с этим всё просто.

Создаём пустой файл размером 200Гб

Многие советуют использовать для этого утилиту dd, например dd if=/dev/zero of=disk-image bs=1M count=1M , но это работает несравнимо медленнее, а результат, как я понимаю, одинаковый.

Форматируем файл в ext4 и монтируем его как файловую систему

К сожалению, я узнал об опции -N команды mkfs.ext4 уже после экспериментов. Она позволяет увеличить лимит на количество inode на FS, не увеличивая размер файла образа. Но, с другой стороны, стандартные настройки — ближе к реальным условиям.

Создаем множество пустых файлов (будет работать несколько часов)

Кстати, если в начале файлы создавались достаточно быстро, то последующие добавлялись всё медленнее и медленнее, появлялись рандомные паузы, росло использование памяти ядром. Так что хранение большого числа файлов в плоской директории само по себе плохая идея.

Проверяем, что все айноды на ФС исчерпаны.

Размер файла директории

Теперь попробуем удалить эту директорию со всем её содержимым различными способами.

Тесты

После каждого теста сбрасываем кеш файловой системы
sudo sh -c 'sync && echo 1 > /proc/sys/vm/drop_caches'
для того чтобы не занять быстро всю память и сравнивать скорость удаления в одинаковых условиях.

Удаление через rm -r

$ rm -r /mnt/test_dir/
Под strace несколько раз подряд (. ) вызывает getdents() , затем очень много вызывает unlinkat() и так в цикле. Занял 30Мб RAM, не растет.
Удаляет содержимое успешно.

Т.е. удалять переполненные директории с помощью rm -r /путь/до/директории вполне нормально.

Удаление через rm ./*

$ rm /mnt/test_dir/*
Запускает дочерний процесс шелла, который дорос до 600Мб, прибил по ^C . Ничего не удалил.
Очевидно, что glob по звёздочке обрабатывается самим шеллом, накапливается в памяти и передается команде rm после того как считается директория целиком.

Удаление через find -exec

$ find /mnt/test_dir/ -type f -exec rm -v <> \;
Под strace вызывает только getdents() . процесс find вырос до 600Мб, прибил по ^C . Ничего не удалил.
find действует так же, как и * в шелле — сперва строит полный список в памяти.

Удаление через find -delete

$ find /mnt/test_dir/ -type f -delete
Вырос до 600Мб, прибил по ^C . Ничего не удалил.
Аналогично предыдущей команде. И это крайне удивительно! На эту команду я возлагал надежду изначально.

Удаление через ls -f и xargs

$ cd /mnt/test_dir/ ; ls -f . | xargs -n 100 rm
параметр -f говорит, что не нужно сортировать список файлов.
Создает такую иерархию процессов:

Удаление через perl readdir

$ perl -e 'chdir "/mnt/test_dir/" or die; opendir D, "."; while ($n = readdir D) < unlink $n >' (взял здесь)
Под strace один раз вызывает getdents() , потом много раз unlink() и так в цикле. Занял 380Кб памяти, не растет.
Удаляет успешно.

Получается, что использование readdir вполне возможно?

Удаление через программу на C readdir + unlink

$ gcc -o cleandir cleandir.c
$ ./cleandir
Под strace один раз вызывает getdents() , потом много раз unlink() и так в цикле. Занял 128Кб памяти, не растет.
Удаляет успешно.

Опять — же, убеждаемся, что использовать readdir — вполне нормально, если не накапливать результаты в памяти, а удалять файлы сразу.

Как очистить медиатеку в iTunes

К сожалению, в iTunes не предусмотрено функции, которая бы позволила разом удалить всю медиатеку iTunes, поэтому данную задачу потребуется выполнять вручную.

Как очистить медиатеку iTunes?

1. Запустите программу iTunes. В верхнем левом углу программы располагается наименование текущего открытого раздела. В нашем случае это «Фильмы». Если щелкнуть по нему, откроется дополнительное меню, в котором можно выбрать раздел, в котором будет выполняться дальнейшее удаление медиатеки.

Как очистить медиатеку в iTunes

2. Например, мы хотим удалить из медиатеки видеозаписи. Для этого в верхней области окна убеждаемся, что открыта вкладка «Мои фильмы», а затем в левой области окна открываем нужный раздел, например, в нашем случае это раздел «Домашние видео», где отображаются видеозаписи, добавленные в iTunes с компьютера.

Как очистить медиатеку в iTunes

3. Щелкаем по любой видеозаписи один раз левой кнопкой мыши, а затем выделяем все видеозаписи сочетанием клавиш Ctrl+A. Чтобы удалить видео щелкаем на клавиатуре по клавише Del или кликаем по выделенному правой кнопкой мыши и в отобразившемся контекстном меню выбираем пункт «Удалить».

Как очистить медиатеку в iTunes

4. В завершение процедуры вам потребуется подтвердить очистку удаляемого раздела.

Как очистить медиатеку в iTunes

Подобным образом выполняется удаление и других разделов медиатеки iTunes. Предположим, мы хотим удалить еще и музыку. Для этого щелкаем по текущему открытому разделу iTunes в левой верхней области окна и переходим к разделу «Музыка».

Как очистить медиатеку в iTunes

В верхней части окна открываем вкладку «Моя музыка», чтобы открыть пользовательские музыкальные файлы, а в левой области окна выбираем пункт «Песни», чтобы открыть все треки медиатеки.

Как очистить медиатеку в iTunes

Щелкаем по любому треку левой кнопкой мыши, а затем нажимаем сочетание клавиш Ctrl+A, чтобы выделить треки. Для удаления нажимаем клавишу Del или щелкаем по выделенному правой кнопкой мыши, выбирая пункт «Удалить».

Как очистить медиатеку в iTunes

В заключение вам лишь остается подтвердить удаление музыкальной коллекции из медиатеки iTunes.

Как очистить медиатеку в iTunes

Подобным образом в iTunes выполняется очистка и других разделов медиатеки. Если у вас остались вопросы, задавайте их в комментариях.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Читайте также: