Вопрос или проблема
У меня есть серия файлов, которые всегда начинаются с как минимум 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
с использованием как регулярных выражений, так и глобов (шаблонов), прежде чем заменить вывод на удаление файла. Это поможет избежать случайного удаления нужных данных.
Подход через регулярные выражения
-
Тестирование с помощью регулярных выражений:
Используйте команду для нахождения всех файлов, которые соответствуют вашему шаблону, и для проверки правильности вывода:
find . -regextype posix-extended -iregex './[0-9]{5}_.*\.jpg' -print
Убедившись, что найденные файлы соответствуют вашим ожиданиям, замените
-print
на-delete
для удаления:find . -regextype posix-extended -iregex './[0-9]{5}_.*\.jpg' -delete
-
Глоб (шаблоны) как альтернатива регулярным выражениям:
Если регулярные выражения кажутся избыточными, можно использовать более простой способ с глобами для поиска файлов:
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%. Постоянно следите за результатами и адаптируйте подход под конкретные нужды и особенности файловой структуры.
Рекомендуем сохранять все потенциально важные данные, выполняя резервное копирование, перед проведением команд, изменяющих файловую систему.