Проблема в том, что файлы инициализации системы по умолчанию bash
настраивают среду с помощью (что-то вроде)
PROMPT_COMMAND='"\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
Это означает, что перед каждым основным приглашением будет выполняться эта команда, что, я должен согласиться, крайне неудачно, поскольку приглашение должно отображаться $PS1
, а не $PROMPT_COMMAND
.
Добавление к этому вашему собственному определению $PS1
вызовет "двойное приглашение".
Решение для одного пользователя состоит в том, чтобы снять PROMPT_COMMAND
в ~/.bashrc
на сервере с
unset PROMPT_COMMAND
Общесистемное -решение будет включать в себя поиск файла инициализации оболочки, который устанавливает эту переменную, и либо удаление, либо закомментирование этой строки.
Файлы, которые могут быть интересны для поиска:
/etc/profile
/etc/bash.bashrc
...и, возможно, другие файлы в разделе /etc
, полученные из них. Кроме того, обратитесь к разделу «INVOCATION» в руководстве bash
по вашей системе, чтобы узнать, какие другие файлы используются для инициализации bash
.
Ни один из ваших файлов примеров не удовлетворяет второму из указанных вами критериев имени файла. Есть файлы, содержащие _c
, но ни один из них не заканчивается на _c
. Предполагая, что вы имели в виду содержит , вы можете построить команду find
следующим образом:
find /NAS/logs -type d -path '/NAS/logs/.snapshot' -prune -o -type f -mtime +7 \( -name 'developer_*' -o -name '*_c*' \) -print
Это можно разбить на две части (условие-o
(или )):
/NAS/logs/.snapshot
отбрасывается (сокращается )и дальнейшие действия там не рассматриваются. developer_*
или *_c*
, перечислены (напечатанными ). Вы должны заменить -print
на -delete
или просто добавить -delete
, чтобы удалить файлы, которые вы сопоставили.
Если вы хотите удалить какой-либо экземпляр каталога .snapshot
, вы можете изменить первую часть критериев соответствия следующим образом
find /NAS/logs -type d -name '.snapshot' -prune -o...
Теперь, когда вы добавили дополнительную информацию к своему вопросу, на самом деле больше не требуется никакой сложности сокращения.Вы можете просто использовать это:
find /NAS/logs -maxdepth 1 -type f -mtime +7 \( -name 'developer_*' -o -name '*_c*' \) -print
(Это показывает важность предоставления полной информации в вашем вопросе, а не предоставление ее по частям -или не предоставление ее вообще.)
I also tried -prune option but no help
И что случилось?
Ссылка в моем комментарии показывает, что есть проблема с -сокращением и -удалением вместе из-за -глубины. найти -и -обрезать -объяснения
Думаю, здесь нужно сделать что-то вроде
... -path '*/.snapshot/*' -o...... -delete
Только с массивными данными (и тестами )вы пропустите действие «-обрезки».
find kernel -path '*/sched/*' -o -name '???.c' -exec grep -H 'struct ta' {} +
находит строки в sys.c, pid.c и cpu.c.
То же самое без-o
(то же, что и с-a
)дает три строки только в kernel/sched/psi.c.