Мне нужно удалить рекурсивно все файлы, имеющие следующий контент HEX: \xDE\xAD\xBA\xAD
Можете ли вы предложить команду терминала, которая сделает это?
Чтобы найти эти файлы, вы можете использовать эту команду:
LC_ALL=C grep -Fral $'\xDE\xAD\xBA\xAD'
Настройка LC_ALL=C - это мера безопасности, чтобы убедиться, что не работает многобайтовое поведение или какая-либо другая странность. Вероятно, не требуется, хотя может ускорить операцию.
grep ищет файлы, соответствующие определенному шаблону.
-F сообщает, что шаблон является простой строкой, а не регулярное выражение. Здесь не нужно, хотя это было бы необходимо, если бы ваш паттерн содержал символы, которые имеют особое значение в регулярных выражениях.
-r сообщает, что grep работает рекурсивно.
-a сообщает
-l сообщает ему, чтобы он указывал только имена файлов, а не соответствующие строки.
Порядок из этих четырех параметров не имеет значения.
$'\xDE...' сообщает bash, ваш интерпретатор командной строки помещать эти фактические байты в командной строке перед запуском grep. То есть grep уже видит четыре необработанных байта вместо строки \xDE....
Если вы удовлетворены результатом после сухого хода (настоятельно рекомендуется), вы должны добавить еще один -z для grep, чтобы его вывод был ограничен символами NUL, а не символами новой строки, а затем передал вывод на xargs:
LC_ALL=C grep ... -z ... | xargs -0 rm -i --
xargs передает все значения, которые он видит из своего стандартный вход в параметры команды -i.
xargs 's -0 соответствуют grep' s -Z: ожидается, что вход будет разделен на NUL.
rm -i делает rm интерактивным, удалите это, если вы абсолютно уверены, что хотите, чтобы все такие файлы были удалены без подтверждения, вы точно знаете, что вы делаете, у вас есть резервную копию, и вы подтвердили, что я не сделал здесь серьезной ошибки, которая может привести к неожиданному удалению файлов. : -)
rm 's -- гарантирует, что rm не обрабатывает ни один из оставшихся аргументов в качестве параметров командной строки, на всякий случай, когда первый матч grep был бы имя файла, начинающееся с -.
Сначала запустите команду grep, чтобы увидеть интересующие файлы:
grep -REl '\\xDE\\xAD\\xBA\\xAD' /path/to/file/location/
Затем с помощью rm:
rm -rf $(grep -REl '\\xDE\\xAD\\xBA\\xAD' /path/to/file/location/)
Информация:
-R: используется для поиска местоположения с помощью grep
-E: опция расширенного регулярного выражения grep
\: символ escape grepe regex, используемый для обеспечения \ включенный в поиск.
-l: опция grep для отображения файлов, в которых найден найденный шаблон
Чтобы найти эти файлы, вы можете использовать эту команду:
LC_ALL=C grep -Fral $'\xDE\xAD\xBA\xAD'
Настройка LC_ALL=C - это мера безопасности, чтобы убедиться, что не работает многобайтовое поведение или какая-либо другая странность. Вероятно, не требуется, хотя может ускорить операцию.
grep ищет файлы, соответствующие определенному шаблону.
-F сообщает, что шаблон является простой строкой, а не регулярное выражение. Здесь не нужно, хотя это было бы необходимо, если бы ваш паттерн содержал символы, которые имеют особое значение в регулярных выражениях.
-r сообщает, что grep работает рекурсивно.
-a сообщает
-l сообщает ему, чтобы он указывал только имена файлов, а не соответствующие строки.
Порядок из этих четырех параметров не имеет значения.
$'\xDE...' сообщает bash, ваш интерпретатор командной строки помещать эти фактические байты в командной строке перед запуском grep. То есть grep уже видит четыре необработанных байта вместо строки \xDE....
Если вы удовлетворены результатом после сухого хода (настоятельно рекомендуется), вы должны добавить еще один -z для grep, чтобы его вывод был ограничен символами NUL, а не символами новой строки, а затем передал вывод на xargs:
LC_ALL=C grep ... -z ... | xargs -0 rm -i --
xargs передает все значения, которые он видит из своего стандартный вход в параметры команды -i.
xargs 's -0 соответствуют grep' s -Z: ожидается, что вход будет разделен на NUL.
rm -i делает rm интерактивным, удалите это, если вы абсолютно уверены, что хотите, чтобы все такие файлы были удалены без подтверждения, вы точно знаете, что вы делаете, у вас есть резервную копию, и вы подтвердили, что я не сделал здесь серьезной ошибки, которая может привести к неожиданному удалению файлов. : -)
rm 's -- гарантирует, что rm не обрабатывает ни один из оставшихся аргументов в качестве параметров командной строки, на всякий случай, когда первый матч grep был бы имя файла, начинающееся с -.
Сначала запустите команду grep, чтобы увидеть интересующие файлы:
grep -REl '\\xDE\\xAD\\xBA\\xAD' /path/to/file/location/
Затем с помощью rm:
rm -rf $(grep -REl '\\xDE\\xAD\\xBA\\xAD' /path/to/file/location/)
Информация:
-R: используется для поиска местоположения с помощью grep
-E: опция расширенного регулярного выражения grep
\: символ escape grepe regex, используемый для обеспечения \ включенный в поиск.
-l: опция grep для отображения файлов, в которых найден найденный шаблон