Удалить рекурсивно все файлы, имеющие конкретный контент HEX

Мне нужно удалить рекурсивно все файлы, имеющие следующий контент HEX: \xDE\xAD\xBA\xAD

Можете ли вы предложить команду терминала, которая сделает это?

0
задан 26 October 2017 в 17:28

4 ответа

Чтобы найти эти файлы, вы можете использовать эту команду:

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 был бы имя файла, начинающееся с -.

0
ответ дан 18 July 2018 в 04:30

Сначала запустите команду 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 для отображения файлов, в которых найден найденный шаблон

0
ответ дан 18 July 2018 в 04:30

Чтобы найти эти файлы, вы можете использовать эту команду:

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 был бы имя файла, начинающееся с -.

0
ответ дан 24 July 2018 в 18:05

Сначала запустите команду 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 для отображения файлов, в которых найден найденный шаблон

0
ответ дан 24 July 2018 в 18:05

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

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