Исключить скрытый каталог из поиска и удаления

Проблема в том, что файлы инициализации системы по умолчанию 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.

0
18.11.2019, 19:13
2 ответа

Ни один из ваших файлов примеров не удовлетворяет второму из указанных вами критериев имени файла. Есть файлы, содержащие _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(или )):

  1. Сопоставление пути дерева /NAS/logs/.snapshotотбрасывается (сокращается )и дальнейшие действия там не рассматриваются.
  2. Файлы, измененные более семи дней назад, с именем, совпадающим с 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

(Это показывает важность предоставления полной информации в вашем вопросе, а не предоставление ее по частям -или не предоставление ее вообще.)

3
28.01.2020, 02:21

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.

0
28.01.2020, 02:21

Теги

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