2017-01-31 4 views
3

Я хотел бы очистить содержимое многих файлов журнала данного каталога рекурсивно, не удаляя каждый файл. Возможно ли это с помощью простой команды?Команда для регенерации множества файлов

Я знаю, что могу делать > logs/logfile.log по одному, но в этой папке много журналов, и это не просто.

Я использую macOS Sierra, кстати.

ответ

3

Благодаря @chepner показал мне лучший способ защиты от двойных кавычек в именах файлов:

Вы можете использовать find сделать это

find start_dir -type f -exec sh -c '> "$1"' _ {} \; 

И вы можете добавить дополнительные ограничения, если вы не хотите, чтобы все файлы, как если вы хотите только файлы, заканчивающиеся в .log вы могли бы сделать

find start_dir -type f -name '*.log' -exec sh -c '> "$1"' _ {} \; 
+1

Если '{}' содержит двойную кавычку, это не сработает. Лучше передать значение '{}' в качестве аргумента в 'sh':' ... -exec sh -c '> "$ 1"' _ {} \; '. – chepner

1

в MacOS включает Perl в любом случае:

perl -e 'for(<logs/*log>){truncate $_,0}' 

Или, более кратко, если вы используете доморощенного и вы установили GNU Parallel (это просто скрипт Perl), вы можете сделать:

parallel '>' ::: logs/*log 
Смежные вопросы