Восстановленные файлы сохраняются в /myPhotorec.

Цель состоит в том, чтобы рекурсивно просмотреть каждый файл, и если он НЕ содержит строку "44c9ea3abbd24" в содержимом файла (а не в имени файла) , затем удалите его. Целью был файл Python .py, который случайным образом переименовывается по имени восстановления файла.

Если этого сделать нельзя, то, может быть, файл, содержащий файл, можно скопировать в каталог /filtered?

0
gatorback 5 Май 2018 в 16:21
Строка 44c9ea3abbd24 или слово 44c9ea3abbd24?
 – 
cuonglm
5 Май 2018 в 08:20
Текстовые файлы, которые необходимо сохранить/отсортировать, имеющие строку 44c9ea3abbd24.
 – 
gatorback
5 Май 2018 в 08:49
1
Строка находится в содержимом файла или в имени файла?
 – 
Kusalananda
5 Май 2018 в 08:51
1
Спасибо за очень хороший вопрос. содержимое файла.
 – 
gatorback
5 Май 2018 в 16:24

2 ответа

find /myPhotorec -type f ! -exec grep -qF '44c9ea3abbd24' {} ';' -print -delete

Это найдет все обычные файлы в каталоге /myPhotorec или в нем, проверит, содержат ли они заданную строку (в содержимом файла), и для каждого файла, который не содержит строку, отобразит пути и удалит их. .

Если ваш find не поддерживает -delete, замените эту часть на -exec rm {} +.

Если вы хотите вручную подтверждать каждое удаление, измените -delete на -ok rm {} ';'.

Относительно find ... -exec ...: Понимание параметра -exec команды `find`

1
Kusalananda 5 Май 2018 в 21:15
Было бы педагогически полезно, если бы к объяснению были добавлены два дополнительных фрагмента кода: 1) найти имена файлов без целевой строки и передать в 2) команду удаления. Предварительные результаты тестирования вашего решения выглядят хорошо на OS X.
 – 
gatorback
5 Май 2018 в 16:34
Передача результатов find во что-либо, как правило, не является хорошей идеей. Очевидно, можно использовать нестандартный -print0 с find, а затем передать его в xargs -0 rm (где -0 также нестандартен), но это не имеет абсолютно никакого преимущества перед используя, например -exec rm {} + как в моем ответе.
 – 
Kusalananda
5 Май 2018 в 16:38
Моя ошибка, вы не использовали трубу в своем решении. Я пытаюсь разобрать решение, потому что мое понимание команд find и exec очень простое. Разбив его в соответствии с вашим мыслительным процессом, вы ускорите процесс обучения.
 – 
gatorback
5 Май 2018 в 21:12
Я добавил ссылку на довольно длинный ответ, который я написал ранее по этой теме.
 – 
Kusalananda
5 Май 2018 в 21:16