find /myPhotorec -type f ! -exec grep -qF '44c9ea3abbd24' {} ';' -print -delete
Это найдет все обычные файлы в каталоге
/myPhotorec
или в нем, проверит, содержат ли они заданную строку (в содержимом файла ), и для каждого файла, который не содержит строку, отобразит пути и удалите их.Если ваш
find
не поддерживает-delete
, замените эту часть на-exec rm {} +
.Если вы хотите вручную подтверждать каждое удаление, измените
-delete
на-ok rm {} ';'
.Относительно
find... -exec...
:Понимание опции -exec команды `find`
Трюк с xargs
здесь не сработает, потому что psql требует, чтобы -c
было одной большой строкой.
Попробуйте альтернативный подход, поместив весь sql в файл с именем statements.sql
и запустив psql
следующим образом:
psql -h "$PHOST" -p "$PPORT" -U "$PUSER" -d "$PDATABASE" -f statements.sql
Для созданияstatemements.sql
:
printf 'SELECT COUNT(*) FROM (%s) AS query;\n' "${SQL%?}" >statements.sql
Эта команда не будет страдать от проблемы «Слишком длинный список аргументов», поскольку printf
является встроенной -утилитой в оболочке bash
.