收藏linux实用命令
大约 2 分钟
打包git commit 文件
# 在需要打包的 commit 上执行:
git archive -o changes.zip HEAD $(git diff-tree --no-commit-id --name-only -r HEAD)
解释一下这个命令:
1 `git diff-tree --no-commit-id --name-only -r HEAD`:查看当前 commit 修改的文件列表,-r 表示递归查看子 commit,--no-commit-id 表示不显示 commit id,--name-only 表示只显示文件名。
2. `$(...)`:把上一步的文件列表作为参数传入下一条命令。
3. `git archive -o changes.zip HEAD`:将 Git 仓库中当前 commit 修改的文件打包为 changes.zip 文件。
这样,就可以将指定 commit 中修改的所有文件打包成一个文件了。注意,需要在需要打包的 commit 上执行命令。
git diff-tree --no-commit-id --name-only -r HEAD | xargs git archive -o changes.zip HEAD
git archive -o changes.zip HEAD $(git diff-tree --no-commit-id --name-only -r <commit>)
git archive -o changes.zip HEAD $(git diff-tree --no-commit-id --name-only -r 7b7c78c4561d2182e80edd89ce8cc9e49b69f1aa)
找出某个时间修改的文件
要查找 /var/log
目录下在 2024 年 4 月 1 日至 2024 年 4 月 15 日之间修改过的文件,你可以运行以下命令:
find /var/log -type f -newermt "2024-04-01" ! -newermt "2024-04-16"
假设你想在 /home/user/documents
目录下查找所有的文本文件,并且这些文件是在 2024 年 4 月 1 日至 2024 年 4 月 15 日之间修改过的:
find /home/user/documents -type f -name "*.txt" -newermt "2024-04-01" ! -newermt "2024-04-16"
排除 runtime
目录
find /home/user/documents -type d -name "runtime" -prune -o \( -type f -name "*.txt" -newermt "2024-04-01" ! -newermt "2024-04-16" \) -print
视频转化
ffmpeg -i 1.ts -c:v copy -c:a copy output.mp4
nginx日志可视化
将某个目录下面的日志文件转化为可视化的html文件展示
#!/bin/bash
# 指定包含 .log 文件的目录
LOG_DIR="/path/to/log/directory"
# 切换到日志目录
cd "$LOG_DIR"
# 遍历目录中的所有 .log 文件
for LOG_FILE in *.log; do
# 检查文件是否存在,避免匹配到没有 .log 文件的情况
if [ -f "$LOG_FILE" ]; then
# 提取不带扩展名的文件名作为输出文件名
BASENAME=$(basename "$LOG_FILE" .log)
# 使用 goaccess 生成 HTML 报告
cat "$LOG_FILE" | docker run --rm -i -e LANG=$LANG allinurl/goaccess -a -o html --log-format COMBINED - > "${BASENAME}.html"
echo "Generated ${BASENAME}.html"
fi
done
echo "HTML reports generation complete."