Удалите все, кроме файла csv. Bash Script

Каждая запись журнала показывает время, в которое она была напечатана. Не больше и не меньше. Если запись журнала описывает процесс, который не является мгновенным, нет правила, что запись журнала должна быть до или после выполнения этого процесса, это зависит от того, что решил сделать разработчик. Грамматика является подсказкой: "сделал это" указывает на то, что действие завершено, "сделает это" указывает на то, что оно еще не выполнено; но "делает это" неоднозначно.

Как объясняет cmks, dmesg показывает только журналы ядра, он не дает полезной картины того, что происходит в системе после запуска initramfs или программы init. Ни одна из показанных вами строк не описывает события, занимающие более доли секунды, поэтому ни одна из них не является причиной длительного времени загрузки. Это что-то другое, что не происходит в ядре.

3
10.05.2019, 18:23
3 ответа

Следует избегать установки переменной PATH. Это используется вашей оболочкой для поиска допустимых команд, установка значения /tmp/не позволит сценарию найти команды rmи cp.

Вы можете добиться желаемого с помощью следующей findкоманды:

find /tmp -not -name '*.csv' -not -path /tmp -exec rm -vr {} \;

Обратите внимание, :это также приведет к удалению всех подкаталогов в /tmp. Если вы этого не хотите, вы должны изменить на:

find /tmp -not -name '*.csv' -type f -exec rm -v {} \;

Еще одно примечание. :Это по-прежнему будет возвращаться к подкаталогам и удалять файлы в них. Если вы этого не хотите, вы можете использовать аргумент maxdepth:

find /tmp -not -name '*.csv' -maxdepth 1 -type f -exec rm -v {} \;

Дополнительное примечание :Я бы никогда не запускал команду find... -exec, которую вы найдете в Интернете, не убедившись, что она сделает то, что вам нужно.Вы должны бежать:

find /tmp -not -name '*.csv' -not -path /tmp

И убедитесь, что он находит только те файлы, которые вам нужны, прежде чем добавлять бит -exec rm -vr {} \;.

5
27.01.2020, 21:08

Пожалуйста, не устанавливайте $PATH, это переменная окружения.

Для BASH, пока включен параметр оболочки extglob (, который используется по умолчанию для многих дистрибутивов Linux ), это просто:

rm !(*.csv)

С путем к папке это будет что-то вроде...

rm yourfolder/!(*.csv)

Если вы считаете, что extglob не включен в вашей среде, просто сделайте это:

shopt -s extglob
6
27.01.2020, 21:08

Вместо того, чтобы удалять все остальное в /tmp, я бы рекомендовал копировать только интересующие вас файлы:

cp /tmp/*.csv /data/logs/

или даже

mv /tmp/*.csv /data/logs/

, если вам не нужно хранить их в /tmp.

Предполагается, что все интересующие вас файлы находятся непосредственно в /tmp; ваше использование rmпредполагает, что они есть.

Поскольку /tmpявляется общим временным каталогом, он может содержать другие файлы, которые ожидают найти там другие запущенные процессы, и удаление всего в /tmp, кроме CSV-файлов, может иметь неблагоприятные последствия. Как уже упоминалось, вы также не должны изменять PATH, так как ваша оболочка использует это для поиска команд, которые вы используете.

4
27.01.2020, 21:08

Теги

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