我有一个文件夹,其中又包含多个子文件夹。所有这些子文件夹都有一个日志文件夹。如何使用父目录中的单个命令从这些子目录中的所有日志文件夹中单独清除所有日志文件?
例如,
Folder/
Sub1/
Log/
Log1.txt
Log2.txt
Sub2/
Log/
Log10.txt
Log11.txt
如何单独清除这些日志文件呢?请注意,子文件夹 sub1 和 sub2 可能包含其他文件夹以及一些不应删除的其他文件。系统是red hat Linux。
答案1
您可以使用 bash 通配来匹配多个文件夹。就像是:
rm ./Folder/*/Log/*
或者甚至更好:
rm ./Folder/Sub*/Log/*
第二个将删除Log
以Sub
.如果需要,您可以在命令中添加-r
(递归)或-f
(强制) 。rm
有关 bash globbing 的更多信息,您可以查看我的另一个答案:是否可以指定目录名称可变的路径?
虽然这直接回答了您的问题,但您可能需要考虑使用logrotate
来管理旧日志文件:http://www.linuxcommand.org/man_pages/logrotate8.html
答案2
查找命令非常强大,您可以在其中对资助的对象执行操作。
find . -type f -name "*.txt" -exec rm -f {} \;
如您所见,此命令查找 *.txt 文件并对其执行 rm 。
要仅删除日志文件夹中的文件:
find . -type d -name "Log" -exec sh -c 'find "$(realpath $1)" -type f -delete' _ {} \;
此命令查找所有 Log 文件夹,然后在其中搜索文件。
答案3
对于这种情况,我们似乎可以使用带有类型参数的 find 。
find {piyush,jain} -type f
piyush/jain/logs/1.log
piyush/jain/logs/2.log
piyush/jain/logs/3.log
jain/piyush/logs/4.log
jain/piyush/logs/5.log
jain/piyush/logs/6.log
find {piyush,jain} -type f | xargs rm -f
find {piyush,jain} -type f
答案4
您也可以在根目录中执行此操作,查找maxdepth
3 个目录-type f
意味着您只想查找不包含目录的文件,然后删除
$ find . -maxdepth 3 -type f -name "*.txt" -exec rm -f {} \;