Удаление определенных файлов в командной строке

Возможно, кому-то нужно разработать OpenMTP, сначала для рабочего стола Ubuntu, «мобильный» Ubuntu и для Android.

Слишком много специальных предложений в дизайне, включая Microsoft DRM, которые задокументированных в «комплекте разработчика» для устройств. Это необходимо переосмыслить как более простой, полностью расширяемый дизайн, который не имеет OpenMTP или Windows Media Player в качестве архитектурного элемента (или предпосылки).

[d9 ] Microsoft DRM

из wikipedia> Протокол передачи мультимедиа

Протокол передачи мультимедиа описан Microsoft, который его представил, как протокол для интеллектуальных устройств хранения данных на основе и совместимый с протоколом передачи изображений (PTP). В то время как PTP был разработан для загрузки фотографий с цифровых камер, Media Transfer Protocol поддерживает передачу музыкальных файлов на цифровые аудиоплееры и мультимедийные файлы на портативных медиаплеерах, а также личную информацию о персональных цифровых помощниках. MTP является ключевой частью WMDRM10-PD, службы управления цифровыми правами (DRM) для платформы Windows Media. Протокол передачи мультимедиа (обычно называемый MTP) является частью среды Windows Media и, таким образом, тесно связан с Windows Media Player. Версии операционной системы Microsoft Windows с Windows XP SP2 поддерживают MTP. Windows XP требуется Windows Media Player 10 или выше; более поздние версии Windows имеют встроенную поддержку. Microsoft также предоставила MTP Porting Kit для старых версий Windows в Windows 98. В системах Apple Macintosh и Linux есть программные пакеты для поддержки MTP. В мае 2008 года рабочая группа устройства USB-исполнителей Форума стандартизировала MTP в качестве полнофункционального класса устройств универсальной последовательной шины (USB). С тех пор MTP является официальным расширением для PTP и имеет один и тот же код класса.
1
задан 15 May 2014 в 22:44

3 ответа

Вы также можете попробовать эту команду,

for i in $(seq 100 100000); do rm fileName_$i; done

Он удалит все файлы (от 100 до 100000), если имя файла содержит номера в последовательном порядке.

6
ответ дан 24 May 2018 в 07:44

Как правило, у вас есть несколько способов достичь этого:

rm fileName_{100..100000}

будет расширяться оболочкой примерно в 100 000 имен файлов. Если basename длинный путь и число достаточно высокое, вы можете фактически превысить максимальную длину командной строки при таком подходе.

Цикл for

for i in $(seq 100 100000); do rm fileName_$i; done
[d3 ] не страдает от этой проблемы, но является относительно медленным способом удаления файлов, поскольку оболочка должна выполнить замену переменных и запуск rm около 100 000 раз.

Оба вышеописанных метода могут вызывать предупреждения, если некоторые файлов, скажем, filename_101.

Обычно решения, основанные на find, лучше, поскольку они работают только с файлами, которые на самом деле там (во время обнаружения). Однако есть некоторые тонкие отличия:

find . -name 'fileName_[100-100000]' -exec rm {} \;

все равно запустит программу rm около 100 000 раз, а при замене окончательного \; на + попытается свести к минимуму количество подпроцессов. Оба метода, вероятно, будут (много или немного) медленнее, чем использование -delete, которое вообще не использует внешние команды, но вместо этого вызывает системные вызовы.

Однако всегда проверяйте сначала, действительно ли шаблон соответствует файлам что вы хотите настроить таргетинг:

stefan@tuxedo ~ % mkdir askubuntu
stefan@tuxedo ~ % touch askubuntu/filename_{1..1000}
stefan@tuxedo ~ % find askubuntu -name 'filename_[100-1000]' 
askubuntu/filename_1

Итак, в этом случае вы должны удалить файл, который хотите сохранить, и оставить файлы, которые должны были быть удалены.

5
ответ дан 24 May 2018 в 07:44

Используйте следующую команду:

find . -name 'fileName_[100-100000]' -exec rm {} \;

Это приведет к удалению файлов от 100 до 100000.

Дополнительная информация: Сайт

4
ответ дан 24 May 2018 в 07:44
  • 1
    Вам лучше использовать +, а не \; - см. здесь . Или, что еще лучше, используйте команду find -delete. – evilsoup 16 May 2014 в 20:34
  • 2
    Я протестировал это, и он удалил только файлName_1. Класс символа [100-100000] соответствует только одному символу, поэтому он может соответствовать только 0 или 1. – deltab 16 May 2014 в 21:48

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

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