searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

mv丢失隐藏文件的排查与解决方案

2024-06-12 08:11:39
2
0

一、背景

目前大数据组件已通过jenkins流水线pipeline的方式实现打rpm包,这个过程分两个步骤:

1. 根据组件镜像打tar包

2. 根据tar包和spec文件打rpm包

 

二、问题发现及解决

1. 问题:给某组件通过执行流水线出rpm包,在进行rpm包验证时,发现rpm包中的文件相比较tar包缺少了一个隐藏文件

2. 排查:打rpm包的流水线jenkinsfile中,mv命令操作问题导致目标文件夹比源文件夹缺少隐藏文件

3. 原因:在打rpm包的逻辑中,由于某些tar包未接入流水线实现标准化打包,而是由研发同学手动打包提供,而研发提供的tar包可能命名不规范,所以在打rpm包时需要进行文件夹重命名操作,使用的命令为 mv filename/* filename2/ ,经查这种方式会导致filename里的隐藏文件不会被移动到filename2里

4. 解决:

将mv filename/* filename2/(filename2存在情况下)

改为mv filename filename2(filename2不存在情况下)

 

三、测试验证

1. 创建隐藏文件

在文件名前加“.”,例如touch .yincang.txt

2. 查看隐藏文件

在Linux系统中,以点(.)开头的文件被视为隐藏文件。要列出这些隐藏文件,可以使用ls命令并带上-a或者-A选项。

-a选项会列出所有文件,包括隐藏文件和.以及..目录。

而-A选项则会列出除了.和..以外的所有文件,包括隐藏文件。

 

 

3. mv几个不同命令及效果

(1)mv filename/* filename2/

含义:将filename文件夹下的文件移动(剪切)到filename2

a) 注意不会移动隐藏文件到目标文件夹!!!

b) filename2需要提前新建好,否则会报错no such file or directory

c) mv之后filename和filename2同时存在

d) 隐藏文件被遗留在源文件夹filename下

 

(2)mv filename filename2

含义:相当于对整个文件夹进行移动,我们想要实现filename文件夹直接重命名为filename2,需要注意mv操作前filename2应不存在!!!否则会和预期不符

a) 因为操作针对整个文件夹,所以filename2下会包含filename下的全部文件,包含隐藏文件

b) 若filename2不存在,则是将filename文件夹重命名为filename2;

c) 若filename2已经存在,则是将filename文件夹移动到filename2文件夹下

 

(3)mv filename/.[^.]* filename2/

含义:将filename文件夹下的隐藏文件移动(剪切)到filename2文件夹下

a) 只针对隐藏文件进行操作

b) 源目录的隐藏文件被剪切走

 

(4)mv filename/* .[^.]* filename2/

含义:将filename文件夹下的所有文件(非隐藏文件+隐藏文件)移动(剪切)到filename2文件夹下

a) 非隐藏文件+隐藏文件都被筛选到,并移动到目标文件夹

b) 隐藏文件被成功移动至目标文件夹,但查看源文件夹下也还会有隐藏文件存在

 

4. 综上所述

如果想要进行文件夹重命名,建议用命令2:mv filename filename2,因为这种方法针对整个文件夹进行操作,不会遗漏隐藏文件,而且源文件夹不做保留,仅保留目标文件夹。但要注意mv操作前不要新建目标文件夹,否则结果会多一层目录(xxx/filename2/filename),与预期不符

 

 

参考文档:

0条评论
0 / 1000
赵****媛
3文章数
0粉丝数
赵****媛
3 文章 | 0 粉丝