我们在 Red Hat Enterprise Linux 上有一台 Kafka 生产机器。
我们如何删除
/var/kafka/kafka-logs
该结尾下的所有文件.index
?我们如何将所有以 结尾的文件移动
.index
到另一个文件夹中/var/tmp/INDEX_BACKUP
?
示例内容如下/var/kafka/kafka-logs
:
./hd3gd.ewhd.pri.processed-98/00000000000000000011.index
./hd3gd.ewhd.pri.processed-99/00000000000000000000.index
./hd3gd.ewhd.suspected_relations-0/00000000000000000000.index
./hd3gd.ewhd.suspected_relations-1/00000000000000000000.index
./hd3gd.ewhd.suspected_relations-2/00000000000000000000.index
./hd3gd.ewhd.suspected_relations-3/00000000000000000000.index
./hd3gd.ewhd.suspected_relations-4/00000000000000000000.index
./hd3gd.ewhd.suspected_relations-5/00000000000000000000.index
./frfwjnwe.fwefew.heartbeat-0/00000000000000000000.index
./frfwjnwe.fwefew.heartbeat-1/00000000000000000000.index
./frfwjnwe.fwefew.heartbeat-1/00000000000000017239.index
./frfwjnwe.fwefew.heartbeat-2/00000000000000000000.index
./frfwjnwe.fwefew.heartbeat-2/00000000000000017238.index
答案1
使用 GNU或兼容版本删除所有以
.index
under结尾的文件:/var/kafka/kafka-logs
find
find /var/kafka/kafka-logs -name \*.index -delete
POSIXly:
find /var/kafka/kafka-logs -name \*.index -exec rm -f {} +
使用 GNU 将它们移动到另一个文件夹
mv
:find /var/kafka/kafka-logs -name \*.index -exec mv -t /var/tmp/INDEX_BACKUP {} +
POSIXly:
find /var/kafka/kafka-logs -name \*.index -exec sh -c ' exec mv "$@" /var/tmp/INDEX_BACKUP/' sh {} +
答案2
广告一:
find /var/kafka/kafka-logs -type f -name "*.index" -exec rm -v {} \;
您可以在这里找到第二个问题的答案:find命令后如何集成mv命令?。
答案3
由于 rm 命令的参数较大,这样的命令将运行得更快(与 find / -exec 相比)。这不需要 GNU find。
Q1.
find /var/kafka/kafka-logs -type f -name "*.index" | xargs rm
Q2。
find /var/kafka/kafka-logs -name "*.index" | xargs -I {} mv {} /var/tmp/INDEX_BACKUP
另请注意,GNU find 不支持 ACL 或扩展属性,因此您绝对不想在 Solaris 上使用 GNU find。
答案4
使用bash
并假设不存在数千这些文件的:
rm /var/kafka/kafka-logs/**.index
mv /var/kafka/kafka-logs/**.index /var/tmp/INDEX_BACKUP
00000000000000000000.index
这不会检查目标上的名称是否已存在,因此它可能会覆盖那里的文件(例如,对于示例文件,您最终只会得到文件的单个副本)。
这两个命令都假设globstar
shell 选项已在bash
using中设置
shopt -s globstar
这将启用**
glob 模式,它将在路径名中匹配 like *
but across /
。