it-swarm-ru.tech

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

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

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

cat file.log

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

nano file.log

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

264
Andrew

В Bash, просто

> filename

сделаю.

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

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

Если вам нужен вызов Sudo, рассмотрите возможность использования truncate как здесь ответили .

440
geek

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

truncate -s 0 test.txt

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

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

109
nono

Вы могли бы сделать это:

echo -n "" > file.log

Использование > для записи (нулевого) ввода из echo -n в файл.

Использование >> будет append пустым вводом в файл (фактически ничего не делая, кроме touching его).

34
Thechickenmoo
: > file.log

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

23
Stuart P. Bentley

ЗШ

>! filename

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

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

Дополнительная информация: http://zsh.sourceforge.net/Doc/Release/Redirection.html

9
Brian Wigginton

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

vim file.txt 

Нажмите Esc,.

:1,$d

Нажмите Enter,.

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

8
soum
$ rm file.log; touch file.log

или же

$ cat > file.log

затем control-d.

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

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

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

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

cat /dev/null > file.log
4
paarth batra

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

truncate -s0 file

или явно с Судо:

Sudo truncate -s0 file

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

2
timeSmith

Если у вас есть пробелы в именах файлов, используйте:

for file in /path/to/file/*; do > "$file"; done

(Я не мог включить это в комментарии к предыдущему ответу, потому что у меня нет 50 репутации. Иногда ограничения являются контрпродуктивными.)

1
d491049

Несколько альтернатив:

ex +%d -scwq file.log
cp /dev/null file.log
vi +%d -escwq file.log
install -m600 /dev/null file.log
1
kenorb

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

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

0
Phoshi

Кроме того, если у вас есть несколько файлов, вы можете использовать следующее:

for file in /path/to/file/*; do > $file; done

Это полезно для файлов журнала в том же каталоге.

0
DomainsFeatured

С моими разрешениями это единственное, что сработало:

touch temp.txt
Sudo mv temp.txt original-file.txt
0
Morgan