Поиск неправильных заголовков YAML

Следующее должно работать:

for x in `find  -type f -mtime +14`; do lsof "$x" >/dev/null && echo "$x in use" || echo "$x not in use" ; done

Вместо echo «$ x не используется» команды, вы можете поместить свой команда rm "$ x" .

Как это работает:

  • поиск файлов, последний раз измененных 14 дней или дольше:

find

-type f -mtime +14

  • перебирать элементы в списке:

for x в ; do ; done

  • выполнить команду 2, если результат lsof равен 0 , иначе выполнить команду 1:

lsof "$ x" && ||

Это полагается на ленивую оценку Bash для выполнения команды 1 или команды 2.

В моей системе (Ubuntu 14.04) это работает с именами файлов с пробелами в них и даже для имен файлов, содержащих ? и * .
Однако это не гарантирует, что он будет работать с любой оболочкой в ​​любой системе. Пожалуйста, проверьте перед заменой команды echo командой rm .

0
19.07.2018, 22:26
2 ответа

Добавление этой строки в скрипт bash сработало

source ~/.bash_profile

источник

0
28.01.2020, 04:17

Это связано с тем, что когда вы запускаете команду через ssh (ssh user@host 'command'), она открывает оболочку входа без -. Отличное описание различий между оболочкой входа в систему и оболочкой входа без -можно найти в этом вопросе . По сути, проблема заключается в том, что когда вы запускаете команду через ssh, ваш ~/.bash_profileне является источником, что означает, что любые изменения пути, который он делает, будут недоступны.

Решение состоит в том, чтобы либо переместить их в ваш ~/.bashrc, который открывается при открытии не -оболочки входа в систему, либо, как вы узнали, получить ваш .bash_profileнепосредственно в скрипте.

0
28.01.2020, 04:17

Теги

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