Как устранить ошибку psql: слишком длинный список аргументов?

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

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

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

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

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

0
12.05.2020, 08:48
1 ответ

Трюк с 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.

1
28.04.2021, 23:14

Теги

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