我想将从rm -rf *.log
删除的文件名附加到另一个文件,例如xyz.abc
。有没有办法做到这一点?
它应该将所有.log
个文件追加到xyz.abc
。试过但失败了,所以问这里。
答案 0 :(得分:1)
最简单的方法是编写一个为您完成此操作的小脚本,并使用该脚本代替系统的真实rm
程序。所以你可以写下这样的东西并保存为$HOME/RemoveLogs
#!/bin/bash
find . -maxdepth 1 -name \*.log -print -exec rm {} +; >> xyz.abc
然后,在终端中,键入以下一次以使脚本可执行
chmod +x $HOME/RemoveLogs
然后,只要您想删除日志,只需运行
即可$HOME/RemoveLogs
或者,您可以直接在终端上输入find
命令,如果您有良好的记忆并且喜欢输入: - )
答案 1 :(得分:0)
鉴于评论中澄清的用例 - 您并未尝试记录所有对rm
的使用,而是从构建过程调用的特定实例(或在构建过程之后清理一个cron作业):
printf '%s\n' *.log >>deletedFiles
rm -f -- *.log
请注意,这不会区分名为bar$'\n'foo
的文件和名为bar
和foo
的两个文件;两者都将连续两行记录。为此,您需要使用'%q\n'
(如果您的shell为bash
)或%s\0
作为格式字符串;前者会以eval-safe形式生成您的日志(人类很容易阅读,难以从shell中安全地解析);后者会以NUL分隔的形式产生它(人类难以阅读,很容易用任何语言的机器解析);要么在所有可能的文件名中都是明确的。
答案 2 :(得分:0)
命令rm -rf *.log
不打印任何输出;它会以静默方式删除指定的文件。
-r
选项可能在这种情况下没有多大意义,可能会有危险。如果您尝试删除当前目录中的所有*.log
文件,则只需
rm -f *.log
只有当您有一个或多个目录时,-r
才有意义,其名称以.log
结尾;然后它将以递归方式删除这些目录及其所有内容。
假设您只想删除当前目录中的所有*.log
文件,并将其名称附加到xyz.abc
,请按以下步骤操作:
for file in *.log ; do
echo "$file" >> xyz.abc
rm -f "$file"
done
答案 3 :(得分:0)
我无法在上述的find命令中运行rm,这似乎是查找,删除和记录的最佳实践,也是我使用shell脚本实现自动化的解决方案(不一定是最佳实践)
从名为removelogs.sh
的shell脚本中
在终端中运行命令sh removelogs.sh
这是removelogs.sh文件中的文本。
cd /var/log;
date >> /var/log/removedlogs.txt;
find . -maxdepth 4 -type f -name \*log.old -delete -print >> /var/log/removedlogs.txt
在CENTOS7上为我工作