Удалите рекурсивно все файлы, которые имеют определенное ШЕСТНАДЦАТЕРИЧНОЕ содержание

Я должен удалить рекурсивно все файлы, которые имеют следующее ШЕСТНАДЦАТЕРИЧНОЕ содержание: \xDE\xAD\xBA\xAD

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

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

2 ответа

Для определения местоположения этих файлов можно использовать эту команду:

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 -0 correspond's к grep -Z: вход, как ожидают, будет NUL-разделен.

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

rm -- удостоверяется rm не обрабатывает ни одного из его остающихся аргументов как параметры командной строки, на всякий случай grepпервое соответствие было бы началом имени файла -.

0
ответ дан 2 November 2019 в 01:09

Выполните команду 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: расширенная regex опция grep

\: власти regex символ ESC, используемый для проверки \ включен в поиск.

-l: опция grep перечислить файлы, где упомянутый шаблон были найдены

0
ответ дан 2 November 2019 в 01:09

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

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