Вопрос Как очистить содержимое файла от командной строки?


У меня есть файл журнала, в котором есть куча вещей, которые мне больше не нужны. Я хочу очистить содержимое.

Я знаю, как печатать содержимое на экране:

cat file.log

Я знаю, как редактировать файл, строка за строкой:

nano file.log

Но я не хочу удалять каждую строку по одному. Есть ли способ сделать это в одной команде, не уничтожая файл?


227
2018-01-01 01:50


происхождения




ответы:


В bash, просто

> filename

Сделаю.

Это оставит вас с пустым файлом имя файла,

постскриптум

Если тебе надо sudo звоните, пожалуйста, подумайте о том, чтобы использовать truncate в виде ответил здесь,


389
2018-01-01 10:20



Это, вероятно, команда raddest в истории вычислений - blarg
Напротив, @ Arekkusandaa.Irujasukin; он отлично работает в любой версии Windows, если, как уже упоминалось, вы используете bash как ваша оболочка, а не e. г. cmd.exe или PowerShell, ни один из которых не является POSIXy достаточным, чтобы можно было ожидать таких вещей. - DopeGhoti


Вы можете использовать команду пользователя: truncate

truncate -s 0 test.txt

("-s 0", чтобы указать размер)

http://www.commandlinefu.com/commands/view/12/empty-a-file


79
2017-08-20 14:21



Лучший ответ, работает, когда вы не root (с sudo) - sudo echo > file просто дает ошибку в таких случаях. - Dmitry Verkhoturov
@DmitryVerkhoturov: sudo bash -c '> filename' как вы используете решения Bash с sudo. - Stuart P. Bentley
brew install truncate на os x с доморощенным. - xaxxon


Вы можете сделать это:

echo -n "" > file.log

С помощью > написать (нулевой) ввод из echo -n к файлу.

С помощью >> бы присоединять нулевой ввод в файл (фактически ничего не делая touch).


32
2018-01-01 01:55



Это оставит там место. - dmckee
Я получаю это: -bash:: команда не найдена - Andrew
echo ""> все равно даст вам файл с одним символом (новая строка.) Если вы хотите использовать эхо, используйте «echo -n> file.log» для эхо-значения null. - Dave Forgac
Было бы лучше использовать выделенную команду с нулевым выходом, например true (или его встроенный псевдоним :), хотя в конечном итоге вам вообще не нужна команда (см. принятый ответ). - Stuart P. Bentley
отлично работает с Mac, спасибо - AMIC MING


: > file.log

Такой же как > filename в Баше, но работает в большем количестве снарядов (Кредит), Перенаправляет вывод из true встроенный (который не имеет выхода) для filename,


22
2017-07-25 22:51



Я пришел, чтобы ответить на этот вопрос, но, увы, он уже здесь ... Возьмите верх. - Aaron Hall
Просто делать :> filename, Разве это не похоже на смайлик? :> - minmaxavg


ЗШ

>! filename

ZSH будет защищать пользователей от клоблирования файлов с помощью оператора перенаправления io >, Если вы используете >! вы можете принудительно усечь существующий файл.

Если вы хотите, чтобы ZSH использовала поведение перенаправления Bash, не было ли защиты от клонирования файлов, тогда вам нужно установить clobber вариант для вашей оболочки.

Больше информации: http://zsh.sourceforge.net/Doc/Release/Redirection.html


9
2017-12-06 20:48





Если вы хотите сделать из редактора vim в командной строке, вы можете попробовать следующее:

vim file.txt 

Нажмите Esc,

:1,$d

Нажмите Войти,

Вы удалите все строки.


7
2017-09-12 18:21



Это единственное, что сработало для моего maillog, даже sudo > /var/log/maillog не очистит его (разрешение отклонено) - bobobobo
@bobobobo Это не работает. sudo > /var/log/maillog означает - запустить sudo и поместить его вывод в файл. Очевидно, что он выводит выходные данные с текущими разрешениями пользователя. Проще сделать sudo su запустить корневую оболочку, а затем сделать > /var/log/maillog, - kan


$ rm file.log; touch file.log

или

$ cat > file.log

с последующим control-d,

или ... или ... или ...

Ах. Вот одна версия команды:

$ dd if=/dev/null of=file.log

4
2018-01-01 01:59



Предложение Thechickenmoo о echo "" > file.log лучше, чем cat вариант, который вы показываете, в этой ситуации есть другие, где cat является более подходящим. оба используют одно и то же перенаправление оболочки для тяжелого подъема. - quack quixote
Вам не нужно запускать команду cat. Просто "> file.log" сделает это. - camh
Удаление файла приведет к сбросу даты создания. - Matteo
Удаление файла приведет к тому, что программы будут смотреть, как этот файл потеряет свой указатель на него (т. Е. Он будет иметь новый адрес в файловой системе). Вообще говоря, да rm выполнит задачу создания пустого файла с тем же именем. Но это не будет правильным для каждого варианта использования. - robert


Ниже также должна работать команда:

cat /dev/null > file.log

4
2018-05-10 12:45





Если вам нужно sudo для привилегии суперпользователя для доступа к файлу, то принятый ответ не будет работать. Использование этого делает работу:

truncate -s0 file

или явно с помощью sudo:

sudo truncate -s0 file

Больше информации здесь http://www.commandlinefu.com/commands/view/12/empty-a-file


1
2018-01-30 19:11





Одна строка за раз?

Попробуйте vi (m), прекрасный текстовый редактор, который может что-то сделать. В этом случае перейдите к строке, нажмите d (для удаления) и d снова (для строки).


0
2018-01-01 03:14



Если вы хотите избавиться от всего файла в vim, указав курсор в верхней части документа, введите d G (это d, затем shift-G) удалит весь файл (d для удаления, G для завершения файл). Я предпочитаю ваш метод, хотя (это дает мне больше времени, чтобы подумать, действительно ли я ДЕЙСТВИТЕЛЬНО хочу уничтожить файл). - Babu
@Babu gg перемещается в верх, так что вся последовательность может быть ggdG, - Bob