Командная строка regextype для удаления файлов

Вопрос или проблема

У меня есть серия файлов, которые всегда начинаются с как минимум 5 числовых значений, например:

85966_88.jpg

Используя этот ответ, я узнал, как использовать find и regextype в команде для удаления таких файлов:

find . -regextype posix-extended -iregex './a_[0-9]{6}' -execdir bash -c '[[ ${1##./a_} > 000750 ]] && echo $1' "removing: " {} \;

Я изменил эту команду в соответствии с моими потребностями следующим образом:

find . -regextype posix-extended -iregex './[0-9]{5}' -execdir bash -c '[[ ${1##./} > 000001 ]] && echo $1' "removing: " {} \;

Я выполняю команду, и она не удаляет файлы. Я не могу понять, как удалить все .jpg, которые имеют числовые значения в первых 5 цифрах, а затем _

Во-первых, команда как написана ничего не удаляет: как отмечено в ответе, который вы связали

Проверьте это с помощью команды echo, и как только вы будете уверены, что перечислены правильные файлы, используйте rm вместо этого.

Во-вторых, это слишком сложно для вашего случая, так как вы не хотите ограничивать удаление диапазоном или подмножеством совпадений (поэтому вам не нужно проверять оболочку) – вы можете просто сделать

find -regextype egrep -regex '.*/[0-9]{5}_.*\.jpg' -print

(для теста) и заменить -print на -delete, когда вы будете уверены, что это работает правильно.

Однако даже regex кажется слишком сложным – простое соответствие с помощью glob на самом деле требует меньше написания:

find -name '[0-9][0-9][0-9][0-9][0-9]_*.jpg' -print

(снова, замените -print на -delete, когда вы уверены).

Если вам не нужно искать рекурсивно, простое соответствие с помощью glob оболочки должно работать:

rm -i [0-9][0-9][0-9][0-9][0-9]_*.jpg

Это работает?

find some_dir -type f -iregex ".*[[:digit:]]{5}_*.jpg" --delete

Ответ или решение

Если вы являетесь ИТ-специалистом и вам нужно удалить файлы с помощью командной строки, которые начинаются с пяти числовых значений, например, "85966_88.jpg", вы можете использовать следующие подходы. Прежде чем приступить к удалению, убедитесь, что вы точно знаете, какие файлы хотите удалить, и что у вас есть резервная копия важных данных.

Во-первых, чтобы протестировать корректный синтаксис, вы можете использовать различные команды find с использованием как регулярных выражений, так и глобов (шаблонов), прежде чем заменить вывод на удаление файла. Это поможет избежать случайного удаления нужных данных.

Подход через регулярные выражения

  1. Тестирование с помощью регулярных выражений:

    Используйте команду для нахождения всех файлов, которые соответствуют вашему шаблону, и для проверки правильности вывода:

    find . -regextype posix-extended -iregex './[0-9]{5}_.*\.jpg' -print

    Убедившись, что найденные файлы соответствуют вашим ожиданиям, замените -print на -delete для удаления:

    find . -regextype posix-extended -iregex './[0-9]{5}_.*\.jpg' -delete
  2. Глоб (шаблоны) как альтернатива регулярным выражениям:

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

    find . -name '[0-9][0-9][0-9][0-9][0-9]_*.jpg' -print

    После проверки правильности списка файлов замените -print на -delete:

    find . -name '[0-9][0-9][0-9][0-9][0-9]_*.jpg' -delete

Подход с использованием не рекурсивного удаления через shell glob

Если вам не требуется рекурсивный поиск и вы находитесь в нужной директории, вы можете использовать команду shell для удаления:

rm -i [0-9][0-9][0-9][0-9][0-9]_*.jpg

Заключение

Убедитесь, что вы тестируете команды, прежде чем выполнять удаление, и используйте ключ -i с rm для интерактивного подтверждения каждого удаления, если вы не уверены на 100%. Постоянно следите за результатами и адаптируйте подход под конкретные нужды и особенности файловой структуры.

Рекомендуем сохранять все потенциально важные данные, выполняя резервное копирование, перед проведением команд, изменяющих файловую систему.

Оцените материал
Добавить комментарий

Капча загружается...