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

<p>у меня есть файл журнала, в котором есть куча вещей, которые мне больше не нужны. я хочу очистить содержимое.</p><p>я знаю, как распечатать содержимое на экране:</p><pre><code>cat file.log </code></pre><p>я знаю, как редактировать файл построчно:</p><pre><code>nano file.log </code></pre><p>но я не хочу удалять каждую строку по одному. есть ли способ сделать это в одной команде, не уничтожая файл, чтобы сделать это?</p>

<p>в bash, просто</p><p><code>> filename</code></p><p>сделаю.</p><p>это оставит вас с пустым файлом<strong> имя файла </strong>.</p><p>постскриптум.</p><p>если вам нужен вызов <code>sudo</code>, рассмотрите возможность использования <code>truncate</code> как <a href="https://superuser.com/a/634217/34893">здесь ответили</a> .</p>

<p>вы можете использовать команду пользователя: truncate</p><pre><code>truncate -s 0 test.txt </code></pre><p>("-s 0", чтобы указать размер)</p><p> <a href="http://www.commandlinefu.com/commands/view/12/empty-a-file">http://www.commandlinefu.com/commands/view/12/empty-a-file</a> </p>

<p>вы могли бы сделать это:</p><pre><code>echo -n "" > file.log </code></pre><p>использование <code>></code> для записи (нулевого) ввода из <code>echo -n</code> в файл.</p><p>использование <code>>></code> будет<em> append </em>пустым вводом в файл (фактически ничего не делая, кроме <code>touch</code>ing его).</p>

<pre><code>: > file.log </code></pre><p>то же, что <code>> filename</code> в bash, но работает в большем количестве оболочек <a href="http://www.tldp.org/ldp/abs/html/io-redirection.html">(кредит)</a> . перенаправляет вывод из встроенной функции <code>true</code> (которая не имеет выходных данных) в <code>filename</code>.</p>

<p>зш</p><pre><code>>! filename </code></pre><p>zsh защитит пользователей от клобинга файлов с помощью оператора перенаправления io <code>></code>. если вы используете <code>>!</code>, вы можете форсировать существующий файл.</p><p>если вы хотите, чтобы zsh использовал перенаправление bash, если защита от перехвата файлов отсутствует, вам нужно установить опцию <code>clobber</code> для вашей оболочки.</p><p>дополнительная информация: <a href="http://zsh.sourceforge.net/doc/release/redirection.html">http://zsh.sourceforge.net/doc/release/redirection.html</a> </p>

<p>если вы хотите сделать это из редактора vim в командной строке, вы можете попробовать это:</p><pre><code>vim file.txt </code></pre><p>нажмите <kbd>esc</kbd>,.</p><pre><code>:1,$d нажмите enter,.вы найдете все строки удалены.

$ rm file.log; touch file.log </code></pre><p>или же</p><pre><code>$ cat > file.log затем control-d.или ... или ... или ...ах. вот версия одной команды:$ dd if=/dev/null of=file.log </code></pre>

<p>ниже команда также должна работать:</p><pre><code>cat /dev/null > file.log </code></pre>

<p>если для доступа к файлу вам нужны права суперпользователя sudo, то принятый ответ не будет работать. используя это работает:</p><pre><code>truncate -s0 file </code></pre><p>или явно с судо:</p><pre><code>sudo truncate -s0 file </code></pre><p>более подробная информация здесь <a href="http://www.commandlinefu.com/commands/view/12/empty-a-file">http://www.commandlinefu.com/commands/view/12/empty-a-file</a> </p>

<p>если у вас есть пробелы в именах файлов, используйте:</p><pre><code>for file in /path/to/file/*; do > "$file"; done (я не мог включить это в комментарии к предыдущему ответу, потому что у меня нет 50 репутации. иногда ограничения являются контрпродуктивными.)

несколько альтернатив:ex +%d -scwq file.log cp /dev/null file.log vi +%d -escwq file.log install -m600 /dev/null file.log 

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

кроме того, если у вас есть несколько файлов, вы можете использовать следующее:for file in /path/to/file/; do > $file; done </code></pre><p>это полезно для файлов журнала в том же каталоге.</p>

<p>с моими разрешениями это единственное, что сработало:</p><pre><code>touch temp.txt sudo mv temp.txt original-file.txt </code></pre>