3

I have log files in a folder. These files after some size are creating a new file old_name.log1 and writing to it.

Now there are many files and I can't clear them one by one. I want to delete old_name.log1, old_name.log2 etc and clear old_name.log.

The file_name can be anything. But the file ends with .log and it's extended files ends with .log1, .log2, etc. How to do it?

3 Answers3

6

Note that OP apparently wants to truncate files. In such case, the desired command is

find /path/to/dir -regextype sed -regex ".*\.log[1-9]*" -exec truncate -s 0 {} \;

Alternatively, in bash

shopt -s globstar
truncate -s 0 **/*.log[1-9]

If you want to clear out any file that has .log in the name

find /path/to/dir -name "*.log*"

If you target .log[digit] specifically, use

find /path/to/dir -regextype sed -regex ".*\.log[1-9]*"

Once you verify either of these two commands find the files you want, append -delete to the command for actual removal

Sergiy Kolodyazhnyy
  • 103,293
  • 19
  • 273
  • 492
  • How to clear these files using the command line? I know how to find. To clear a single file I would use `> old_name.log` But I want to clear multiple files instead of typing each one of their names. – Sreekanth Reddy Balne Feb 07 '19 at 20:03
  • 1
    @Shameless Please read the last sentence in my answer. `find` with `-delete` option does exactly what you ask. Full command is `find /path/to/dir -regextype sed -regex ".*\.log[1-9]*" -delete` . It's common practice to first list files, then delete them to avoid unintended errors. – Sergiy Kolodyazhnyy Feb 07 '19 at 20:08
  • 1
    @Shameless If by clear you mean "keep filename, but delete contents", then you want `find /path/to/dir -regextype sed -regex ".*\.log[1-9]*" -exec truncate -s 0 {} \;` – Sergiy Kolodyazhnyy Feb 07 '19 at 20:17
6

To delete .log1, .log2, etc. files:

rm *.log[1-9]*
  • rm - Delete files
  • *.log[1-9]* - All files in the current directory that contain .log followed by a digit 1-9 then anything else

To test the command before running it, replace the rm with echo. It will print the matching files.

To truncate .log files:

echo -n | tee *.log
  • echo -n - Print nothing
  • tee *.log - Write from stdin to all .log files in the current directory
wjandrea
  • 14,109
  • 4
  • 48
  • 98
  • How to clear these files using the command line? I know how to find. To clear a single file I would use `> old_name.log` But I want to clear multiple files instead of typing each one of their names. – Sreekanth Reddy Balne Feb 07 '19 at 20:03
  • @Shameless Oh, I thought "clear" meant "delete". Usually I've heard emptying a file called "erasing" or maybe "zeroing" or "wiping". I'll revise the answer to do that. – wjandrea Feb 07 '19 at 20:12
  • 1
    @wjandrea this won't work right. Your rm code won't delete log files named *.log.01, *.log.02, etc. Your tee code won't get ANY log files with any names like *.log.1, *.log.01, etc. And, you don't want to touch any *.log file, as it's probably an open active file. – heynnema Feb 08 '19 at 15:59
  • @heynnema You're totally right. My answer is meant to answer the question exactly as asked, regardless of effects. I don't know enough about log files to really comment on it anyway. – wjandrea Feb 08 '19 at 16:06
  • Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/89457/discussion-on-answer-by-wjandrea-how-to-clear-all-files-in-a-folder-ending-with). – Seth Feb 09 '19 at 00:57
4

Quick and dirty... assuming that you have permissions for these log files and directory itself... and you wish to delete the .log* files...

  1. in a Files window, open the directory where the log files are located
  2. search for .log files
  3. Select All, control-click any files to exclude (like the active and open *.log)
  4. then Move to Trash

Note: if you wish to "clear" the .log file, close the application that makes the current .log file, then delete the current .log file with Move to Trash, and then right-click in the folder, select New Document, then Blank Document, and Rename... using the correct .log filename.

heynnema
  • 68,647
  • 15
  • 124
  • 180