Jiahong 的个人博客

凡事预则立,不预则废


  • Home

  • Tags

  • Archives

  • Navigation

  • Search

Anaconda——安装和常用命令

Anaconda安装和使用


安装

  • Anaconda官网下载安装即可

使用

管理conda版本

  • 检查conda版本

    1
    conda --version
  • 升级版本

    1
    conda update conda

管理环境

  • 创建环境

    1
    2
    3
    conda create --name your_env_name python=3.6
    # <==>
    conda create -n your_env_name python=3.6
  • 激活环境

    1
    source activate your_env_name # On Windows, remove the word 'source'
  • 列出所有环境

    1
    2
    3
    4
    5
    conda info --envs 
    # or
    conda info -e
    # or
    conda env list
  • 退出当前环境

    1
    source deactivate # On Windows, remove the word 'source'
  • 复制一个环境

    1
    conda create -n new_env_name --clone old_env_name
  • 删除环境

    1
    conda remove -n your_env_name

管理包

  • 查看已经安装的包

    1
    conda list
  • 向指定环境中安装包

    1
    conda install --name your_env_name package
    • 如果没有--name参数,package默认安装到当前环境中
    • tips: 一般来说当需要在同一个环境下面安装的包比较多时,我们会先激活想要操作的环境,然后直接不使用 --name参数安装

Anaconda——conda命令不能执行

出现包导入异常的错误

  • 错误如下

ImportError: No module named conda.cli

  • 解决方案:重装anaconda

    • 官网上下载anaconda的安装包,注意Python2,和Python3不能错
    • 执行时加上-u参数即可
      1
      bash Anaconda2-2018.12-Linux-x86_64.sh -u
  • 说明:

    • 上面的修复方案不会影响其他第三方包
    • 其他conda环境相关的问题也可以通过重装解决

Anaconda——conda和pip管理包的区别

conda和pip对包的管理有什么区别?

  • conda 使得我们可以在conda环境中安装任何语言的包(包括C语言和Python)
  • pip 使得我们可以在任何环境中安装Python包
管理工具 conda pip
使用环境 conda环境 任意平台
包语言 任意语言 Python语言

管理包命令

  • conda

    • 安装包

      1
      2
      # 从虚拟环境 your_env_name 中安装 packge_name包
      conda install -n your_env_name package_name
    • 删除包

      1
      2
      # 在虚拟环境 your_env_name 中删除 package_name包
      conda remove -n your_env_name package_name
  • pip

    • 安装包

      1
      2
      # 安装包到默认路径
      pip install package_name
    • 卸载包

      1
      2
      # 删除包
      pip uninstall package_name
    • 查看已经安装的包

      1
      2
      3
      4
      # 列出所有包
      pip list
      # 查看指定包的详细信息
      pip show --files package_name
    • 升级包

      1
      pip install --upgrade package_name

关于conda 命令更多详情参考Anaconda——安装和常用命令

DL——特征交叉算子总结


内积

  • 定义 :内积是一种常见的特征交叉方法,它通过计算两个向量对应元素的乘积之和来得到一个标量值,用于衡量两个向量的相似度或相关性
  • 公式 :对于两个向量\(\mathbf{x}=(x_1,x_2,\cdots,x_n)\)和\(\mathbf{y}=(y_1,y_2,\cdots,y_n)\),它们的内积表示为:
    $$\langle\mathbf{x},\mathbf{y}\rangle=\sum_{i = 1}^{n}x_iy_i$$

Hadamard积

  • 定义 :Hadamard积是两个相同维度的向量或矩阵对应元素相乘的运算,结果是与原向量或矩阵同维度的向量或矩阵,它在一些机器学习模型中用于特征的逐元素组合
  • 公式 :若\(\mathbf{x}=(x_1,x_2,\cdots,x_n)\)和\(\mathbf{y}=(y_1,y_2,\cdots,y_n)\),则它们的Hadamard积为:
    $$\mathbf{x}\odot\mathbf{y}=(x_1y_1,x_2y_2,\cdots,x_ny_n)$$

BilinearCross积

  • 定义 :BilinearCross积是一种双线性特征交叉方式,它通过一个矩阵来对两个向量进行交叉操作,能够捕捉到特征之间更复杂的交互关系
  • 公式 :设\(\mathbf{x}\in\mathbb{R}^m\),\(\mathbf{y}\in\mathbb{R}^n\),交叉矩阵为\(\mathbf{W}\in\mathbb{R}^{m\times n}\),则BilinearCross积表示为:
    $$\mathbf{x}^T\mathbf{W}\mathbf{y}=\sum_{i = 1}^{m}\sum_{j = 1}^{n}w_{ij}x_iy_j$$
  • 以上定义也称为BilinearCross内积 ,同理可以定义BilinearCross外积 :
    $$\mathbf{x}\odot(\mathbf{W}\mathbf{y})$$

ML——SVM-支持向量机


手动推导流程

  • 假设有N样本: \(X = (x_{1}, x_{2}, x_{3},\dots x_{N})\)
    • 样本点为: \(((x_{1}, y_{1}), (x_{2}, y_{2}), (x_{3}, y_{3}),\dots (x_{N}, y_{N}))\)
  • 假设 \(x_{i}\) 等所有向量都为列向量, \(w\) 为行向量(这里是为了推到方便,与<<统计学习方法>>一致)
    • 实际代码实现时与行列向量无关,取二者的内积np.inner(w,x)即可

确定分类决策函数

  • 分类超平面
    $$w^{\star}x + b^{\star} = 0$$
    • 分类超平面由 \((w, b)\) 唯一确定(注意: LR的分类超平面由 \((w, b)\) 和阈值唯一确定)
  • 分类决策函数
    $$f(x) = sign(w^{\star}x + b^{\star})$$

确定优化目标

间隔定义
  • 函数间隔定义
    • 点 \((x_{i}, y_{i})\) 到超平面 \((w,b)\) 的函数间隔为(\(y_{i} \in \{1, -1\})\):
      $$\hat{\gamma}_{i} = y_{i}(w\cdot x_{i} + b)$$
    • 所有训练样本 \(X = (x_{1}, x_{2}, x_{3},\dots x_{m})\) 到超平面 \((w,b)\) 的函数间隔为:
      $$\hat{\gamma} = \min_{i=1,\dots,N}\hat{\gamma}_{i}$$
  • 几何间隔的定义
    • 点 \((x_{i}, y_{i})\) 到超平面 \((w,b)\) 的几何间隔为:
      $$\gamma_{i} = y_{i} (\frac{w}{||w||}\cdot x_{i} + \frac{b}{||w||})$$
    • 进一步推导得:
      $$\gamma_{i} = \frac {y_{i}(w\cdot x_{i} + b)}{||w||} = \frac{\hat{\gamma}}{||w||}$$
    • 所有训练样本 \(X = (x_{1}, x_{2}, x_{3},\dots x_{m})\) 到超平面 \((w,b)\) 的几何间隔为:
      $$\gamma = \min_{i=1,\dots,N}\gamma_{i}$$
确定优化目标
  • 求解能够正确划分训练数据集并且几何间隔最大的分类超平面(分离超平面)

  • 定义约束优化问题:
    $$
    \begin{align}
    &\max_{w,b} \quad \gamma \\
    &s.t. \quad y_{i} (\frac{w}{||w||}\cdot x_{i} + \frac{b}{||w||}) \geq \gamma, i = 1,2,\dots,N
    \end{align}
    $$

  • 将 \(\gamma = \frac{\hat{\gamma}}{||w||}\) 带入并在条件中消去分母上的 \(||w||\),得
    $$
    \begin{align}
    &\max_{w,b} \quad\frac{\hat{\gamma}}{||w||} \\
    &s.t.\quad y_{i} (w\cdot x_{i} + b) \geq \hat{\gamma}, i = 1,2,\dots,N
    \end{align}
    $$

  • 上面的式子中,函数间隔 \(\hat{\gamma}\) 的值不影响最优化问题的解,于是我们设置 \(\hat{\gamma}=1\)

    • 因为将参数 \((w,b)\) 同时扩大或缩小为 \((\lambda w,\lambda b)\),函数间隔对应变成 \(\lambda \hat{\gamma}\)
    • 两个等价的优化方法:
      • 设置 \(\hat{\gamma}=1\) 再对原始问题进行最优化得到参数 \((w^{\star},b^{\star})\)
      • 先对原始问题最优化求得参数 \((w,b)\),再将参数同时扩大或缩小为 \((\lambda w,\lambda b)\),使得 \(\lambda \hat{\gamma}=1\) 得到的最终参数 \((w^{\star},b^{\star}) = (\lambda w,\lambda b)\) 等价
        $$
        \begin{align}
        &\max_{w,b}\quad \frac{1}{||w||} \\
        &s.t.\quad y_{i} (w\cdot x_{i} + b) \geq 1, i = 1,2,\dots,N
        \end{align}
        $$
  • 进一步分析,由于最大化 \(\frac{1}{||w||}\) 与最小化 \(\frac{1}{2}||w||^{2}\) 等价(这里 \(w\) 为行向量时, \(||w||^{2} = ww^{T}\)), 最优化问题可等价表示为:
    $$
    \begin{align}
    &\min_{w,b}\quad \frac{1}{2}||w||^{2} \\
    &s.t.\quad y_{i} (w\cdot x_{i} + b) \geq 1, i = 1,2,\dots,N
    \end{align}
    $$

    • 这是一个凸二次规划问题(convex quadratic programming),凸优化问题参考Math——凸二次优化问题和拉格朗日对偶性
优化问题的求解(对偶)
  • 首先将SVM优化问题转换为一般凸优化形式
    $$
    \begin{align}
    &\min_{w,b}\quad \frac{1}{2}||w||^{2} \\
    &s.t.\quad 1 - y_{i} (w\cdot x_{i} + b) \leq 0, i = 1,2,\dots,N
    \end{align}
    $$
  • 由上述优化问题定义拉格朗日函数
    $$
    \begin{align}
    L(w,b,\alpha) = \frac{1}{2}||w||^{2} + \sum_{i=1}^{N}\alpha_{i}(1-y_{i}(w\cdot x_{i} + b))
    \end{align}
    $$
  • 根据拉格朗日对偶性,
    $$
    \begin{align}
    \min_{w,b}\max_{\alpha:\alpha_{i} \geq 0}L(w,b,\alpha) = \max_{\alpha:\alpha_{i} \geq 0}\min_{w,b}L(w,b,\alpha)
    \end{align}
    $$
    • 左边:原始问题为极小极大问题
    • 右边:对偶问题为极大极小问题
  • 解对偶问题:
  • 先求
    $$
    \begin{align}
    \min_{w,b}L(w,b,\alpha)
    \end{align}
    $$
  • 求导数为0得
    $$
    \begin{align}
    \nabla_{w}L(w,b,\alpha) &= w - \sum_{i=1}^{N}\alpha_{i}y_{i}x_{i} = 0 \\
    \nabla_{b}L(w,b,\alpha) &= \sum_{i=1}^{N}\alpha_{i}y_{i} = 0
    \end{align}
    $$
  • 解得:
    $$
    \begin{align}
    &w = \sum_{i=1}^{N}\alpha_{i}y_{i}x_{i} \\
    &\sum_{i=1}^{N}\alpha_{i}y_{i} = 0
    \end{align}
    $$
  • 代入原来的拉格朗日函数有:

$$
\begin{align}
\min_{w,b}L(w,b,\alpha) &= \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_{i}\alpha_{j}y_{i}y_{j}(x_{i}\cdot x_{j}) + \sum_{i=1}^{N}\alpha_{i}(1-y_{i}(\left [\sum_{j=1}^{N}\alpha_{j}y_{j}x_{j}\right]\cdot x_{i} + b)) \\
&= \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_{i}\alpha_{j}y_{i}y_{j}(x_{i}\cdot x_{j}) - \sum_{i=1}^{N}\alpha_{i}y_{i}\left [\sum_{j=1}^{N}\alpha_{j}y_{j}x_{j}\right]\cdot x_{i} + \sum_{i=1}^{N}\alpha_{i}y_{i}b + \sum_{i=1}^{N}\alpha_{i}\\
&= \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_{i}\alpha_{j}y_{i}y_{j}(x_{i}\cdot x_{j}) - \sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_{i}y_{i}\alpha_{j}y_{j}(x_{j}\cdot x_{i}) + \sum_{i=1}^{N}\alpha_{i}y_{i}b + \sum_{i=1}^{N}\alpha_{i}\\
&= -\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_{i}\alpha_{j}y_{i}y_{j}(x_{i}\cdot x_{j}) + 0 + \sum_{i=1}^{N}\alpha_{i}\\
&= -\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_{i}\alpha_{j}y_{i}y_{j}(x_{i}\cdot x_{j}) + \sum_{i=1}^{N}\alpha_{i}
\end{align}
$$

  • 上面的 \(\min_{w,b}L(w,b,\alpha)\) 对 \(\alpha\) 求极大值有:
    $$
    \begin{align}
    \max_{\alpha} \quad &-\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_{i}\alpha_{j}y_{i}y_{j}(x_{i}\cdot x_{j}) + \sum_{i=1}^{N}\alpha_{i} \\
    s.t. \quad &\sum_{i=1}^{N}\alpha_{i}y_{i} = 0 \\
    \quad &\alpha_{i} \geq 0, i = 1,2,\dots,N
    \end{align}
    $$

  • 转换为一般优化问题
    $$
    \begin{align}
    \min_{\alpha} \quad &\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_{i}\alpha_{j}y_{i}y_{j}(x_{i}\cdot x_{j}) - \sum_{i=1}^{N}\alpha_{i} \\
    s.t. \quad &\sum_{i=1}^{N}\alpha_{i}y_{i} = 0 \\
    \quad &-\alpha_{i} \leq 0, i = 1,2,\dots,N
    \end{align}
    $$

  • 假设上面的式子能够求得 \(\alpha\) 的解为:
    $$
    \begin{align}
    \alpha^{\star} = (\alpha_{1}^{\star}, \alpha_{2}^{\star},\dots, \alpha_{N}^{\star})
    \end{align}
    $$

  • 根据拉格朗日对偶问题与原始问题的解对应的条件,Math——凸优化问题和拉格朗日对偶性,如果上面的式子中存在下标 \(j\),满足 \(-\alpha_{j}^{\star} < 0\),即满足:
    $$\exists j \quad \alpha_{j}^{\star} > 0$$

  • 那么最终可求得:
    $$
    \begin{align}
    &w^{\star} = \sum_{i=1}^{N}\alpha_{i}^{\star}y_{i}x_{i} \\
    \end{align}
    $$

  • \(b^{\star}\) 的表达式由 \(\alpha_{j}^{\star} > 0\),和KKT条件 \(\alpha_{j}^{\star}(y_{j}(w^{\star}\cdot x_{j} + b^{\star})-1) = 0\) 可解得:
    $$
    \begin{align}
    y_{j}(w^{\star}\cdot x_{j} + b^{\star})-1 = 0 \\
    \end{align}
    $$

  • 注意到 \(y_{j}\in \{-1, 1\}\),所以 \(y_{j}^{2}=1\)
    $$
    \begin{align}
    y_{j}^{2}(w^{\star}\cdot x_{j} + b^{\star})-y_{j} = 0 \\
    w^{\star}\cdot x_{j} + b^{\star} = y_{j} \\
    \end{align}
    $$

  • 所以有
    $$
    \begin{align}
    b^{\star} &= y_{j} - w^{\star}\cdot x_{j} \\
    &= y_{j} - \sum_{i=1}^{N}\alpha_{i}^{\star}y_{i}(x_{i}\cdot x_{j})
    \end{align}
    $$

  • 综合 \(w^{\star}\) 和 \(b^{\star}\) 的表达式,我们有分类超平面为:
    $$
    \begin{align}
    w^{\star}x + b^{\star} &= 0 \\
    \sum_{i=1}^{N}\alpha_{i}^{\star}y_{i}(x_{i}\cdot x) + b^{\star} &= 0
    \end{align}
    $$

  • 分类决策函数为:
    $$
    \begin{align}
    f(x) &= sign(w^{\star}x + b^{\star}) \\
    f(x) &= sign\left (\sum_{i=1}^{N}\alpha_{i}^{\star}y_{i}(x_{i}\cdot x) + b^{\star}\right )
    \end{align}
    $$

    • 这就是分线性可分SVM的对偶形式
    • 分类决策函数只与待预测的样本 \(x\) 和已有训练数据 \(x_{j}\) 的输入内积 \((x_{j}\cdot x)\) 相关
      • 注意 \(b^{\star}\) 是通过原始训练样本算出来的定值, \(b^{\star}, w^{\star}\) 的值与待预测的未知样本无关,训练样本确定,参数就确定了, 内积的出现是在加入位置样本后 \(w^{\star}\cdot x\) 产生的
    • SVM的对偶形式使得我们可以用核函数来扩展SVM(非线性核函数可使得SVM能解决非线性问题)

支持向量

  • 优化问题的推导过程中,又一步,对偶问题与原始问题能够相等的条件是存在下标 \(j\),满足 \(-\alpha_{j}^{\star} < 0\),即满足:
    $$\exists j \quad \alpha_{j}^{\star} > 0$$
  • 上面的 \(j\) 对应的样本点 \((x_{j}, y_{j})\) 就是支持向量
    • 支持向量一定在间隔边界上:
      $$y_{j}(w^{\star}\cdot x_{j}+b^{\star})-1 = 0$$
    • 或者
      $$w^{\star}\cdot x_{j}+b^{\star} = \pm 1$$
      • \(y_i\) 的取值为 1 或者 -1
    • 实际上,在训练时参数 \((w^{\star}, b^{\star})\) 只依赖于 \(\alpha_{j} > 0\) 的点,即只依赖支持向量
      $$
      \begin{align}
      &w^{\star} = \sum_{i=1}^{N}\alpha_{i}^{\star}y_{i}x_{i} \\
      &b^{\star} = y_{j} - \sum_{i=1}^{N}\alpha_{i}^{\star}y_{i}(x_{i}\cdot x_{j})
      \end{align}
      $$
    • 所有非支持向量对应的 \(\alpha_{i} = 0\),所以对最终参数 \((w^{\star}, b^{\star})\) 只与支持向量相关

核函数

  • \(\phi(x)\) 定义为从输入空间到希尔伯特空间的映射
    $$
    \begin{align}
    K(x,z) = \phi(x)\phi(z)
    \end{align}
    $$
  • 将SVM对偶形式中的内积 \((x_{i}\cdot x_{j})\) 用核函数 \(K(x_{i},x_{j}) = \phi(x_{i})\phi(x_{j})\) 来替代即可在SVM中应用核技巧

常用核函数

  • 多项式核函数
    $$K(x,z) = (x\cdot z + 1)^{p}$$
  • 高斯核函数
    $$K(x,z) = e^{\left( -\frac{||x-z||^{2}}{2\sigma^{2}}\right )}$$
  • 字符串核函数
    [待更新]

序列最小最优化算法(SMO)

  • 为什么要用SMO?
    • 前面我们的推导将 SVM的参数求解 转化为了一个求解凸二次优化的问题
    • 凸二次优化问题有全局最优解(有很多优化算法可以求解凸二次优化问题)
    • 但是当样本量太大时,普通的凸二次优化算法会变得十分低效 ,导致实际操作中无法使用
    • 所以我们需要一个能高效实现的算法 SMO
  • 基本思路
    • 如果所有变量的解都满足最优化问题的KKT条件,那么这个最优化问题的解就得到了
      • 原因: KKT条件是该最优化问题的充要条件
    • 否则,存在某些解不满足KKT条件,选择两个变量,固定其他变量,
      • 两个变量中其中一个是最不满足KKT条件的变量 ,
      • 另一个在第一个确定后,自动由约束条件确定下来
    • 针对这两个变量构建二次规划问题的解,这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解
      • 原因: 因为二次规划问题的目标函数值变得更小
      • 此时可通过解析方法求解(由于只有两个变量,比较简单),整个算法的速度会很快
    • SMO算法不断的将原问题分解为子问题,迭代更新参数,每次更新两个参数,最终得到近似解
  • 优点:
    • 训练速度快

补充说明

SVM需要特征归一化

是必要的

  • 因为SVM寻找的是所谓的间隔(margin), 就是两个支持向量的间隔
  • 如果不归一化的话, 这个间隔会因为不同特征的单位等, 数值被放大或者缩小, 从而造成无法评估间隔 , 所以归一化对于SVM很重要
  • 线性SVM依赖数据表达的距离测度,所以需要对数据先做normalization
    • 个人理解: 非线性的SVM其实也应该归一化,不然核函数映射到高位空间后以后还是可能受数值影响?

损失函数自带正则

  • 由于优化目标中就自带了参数 \(\frac{1}{2}||w||^2\),所以SVM实际上已经自己带了L2正则化了
  • 这也是SVM也叫结构风险最小化算法的原因
    • 结构风险最小化就是模型复杂度最小化

Linux——用户管理

用户管理简单笔记


用某个其他用户身份打开可视化软件

  • 说明:在某个用户不能登录桌面时,可能可以通过进入root用户创建一个新的用户,然后用该用户登录桌面
  • 不同用户之间的软件可能不共享,所以要想打开其他用户装的软件可以考虑从终端切换到其他用户,然后再打开软件
  • 不同用户的git用户信息等都不同,也需要切换到其他用户使用
  • 为了避免用户权限问题,打开软件时都从终端用文件所属用户的身份打开即可

多用户打开各自软件问题

  • 说明:在Linux系统有多个用户时,我们可能需要从一个用户界面打开终端登录另一个用户,从而使用该用户的环境和软件

问题描述

  • 在一个用户登录图形界面后,需要以另一个用户的身份打开一个图形化软件,此时直接打开图形化软件可能遇到如下错误

    No protocol specified

问题发生原因

  • 因为Xserver默认情况下禁止别的用户图形程序运行在当前用户图形界面上

解决方案

  • 在当前用户下执行命令
    1
    xhost +

MySQL——Error code 28; No space left on device

首先说明这是一个MySQL错误,描述的是MySQL临时文件不能打开,空间不足


问题源头

在Ubuntu系统中,爬取数据过多,数量百万级到千万级,而且存储都是以小文件的方式存储的,造成inode的大量使用,从而发生异常,发生异常时服务器尚有20多G的硬盘空间


解决方式

将数据打包起来,然后删除打包后的数据


总结

在做数据分析时最好不要使用小文件存储数据,如果非要存储收也尽量注意打包压缩暂时不必要使用的文件

Bash——Shell使用笔记


显示目录占用空间大小

  • 显示第一层目录大小(人类可读格式,如 M/G)

    1
    du -sh */
    • 命令解释:
      • du:统计当前目录下的第一级下,所有子目录/文件的磁盘占用;
      • -s(--summarize):只显示总大小(不列出子文件/子目录的详细大小);
      • -h(--human-readable):用人类易读的单位(K/M/G)显示;
      • */:通配符,只匹配当前目录下的「第一层子目录」(结尾的 / 是关键,排除文件,只选目录);
    • 这个命令 Mac 也可以使用
    • 在 Linux 里面,这个命令的等价命令是 du -h ./ --max-depth=1
  • 显示当前目录大小(人类可读格式,如 M/G)

    1
    du -sh ./
    • 命令解释:
      • du:统计当前目录的总磁盘占用
      • -s(--summarize):只显示总大小(不列出子文件/子目录的详细大小);
      • -h(--human-readable):用人类易读的单位(K/M/G)显示;
      • ./:只匹配当前目录
  • 显示当前目录下,指定层级的目录磁盘占用情况

    1
    2
    # 以最大 2 级子文件夹为例(包括第一级)
    du -h ./ --max-depth=2
    • 命令解释:
      • du:统计当前目录下的第一级下,所有子目录/文件的磁盘占用;
      • -h(--human-readable):用人类易读的单位(K/M/G)显示;
      • ./:只匹配当前目录
      • --max-depth=2:最深到两级目录

递归删除某个文件夹下的某个名称文件

  • 假设目标文件夹是 /path/to/dir

  • 在执行删除前,先用 -print 检查匹配结果,确保不会误删:

    1
    find /path/to/dir -type f -name "xxx.pt" -print
    • find:递归查找文件
    • /path/to/dir:替换为你的目标目录路径
    • -type f:只匹配普通文件
    • -name "xxx.pt":匹配文件名为 xxx.pt
    • -print:输出匹配结果
  • 删除上述匹配的文件:

    1
    find /path/to/dir -type f -name "xxx.pt" -delete
    • -delete:直接删除匹配到的文件
  • 补充:如果需要匹配所有以 .pt 结尾的文件(比如 model.pt、xxx.pt 等),可以这样写:

    1
    find /path/to/dir -type f -name "*.pt" -delete

搜索符合预期规则的文件并合并

  • 以合并前缀相同的 .jsonl 文件为例:

    1
    ls -1 /user/prefix_* | grep -E "/user/prefix_[0-9]+\.jsonl" | sort -V | xargs cat > path_to_output
    • 单独使用 ls -1 /user/prefix_* | grep -E "/user/prefix_[0-9]+\.jsonl" | sort -V 可以按照顺序打印文件名称
    • 如果不需要排序可以删除 sort -V 参数

Bash——命令分隔符

在 Linux Bash 命令中,有;,&&,||三种命令链接方式,本文将介绍他们之间的区别


三种连接方式的区别

  • ;:各个命令之间相互独立,不管前面的语句是否成功执行,所有命令都将被执行
  • &&:命令依次被执行,只有当前面的命令执行成功后,后面的命令才会被执行
  • ||:命令依次被执行,只有当前面的命令执行失败后,后面的命令才会被执行

Bash——awk和xargs命令的使用

用于在linux bash中设计处理terminal输出自动删除等问题


使用实例

  • 示例:下面的代码是删除所有名字为<none>的docker镜像
    1
    sudo docker images | grep '<none>' | awk '{print $3}' | xargs sudo docker rmi

awk

  • 示例:读取每一行的第三列的值
    1
    awk '{print $3}'

xargs

  • 示例:将管道传递过来的所有行添加到后面的命令后面,等价于sudo docker rmi <rows>
    1
    xargs sudo docker rmi
1…61626364
Joe Zhou

Joe Zhou

Stay Hungry. Stay Foolish.

631 posts
53 tags
GitHub E-Mail
© 2026 Joe Zhou
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4