• 欢迎访问好鸭,WordPress信息,WordPress教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏好鸭吧

Linux/Git下对大量的文件分批操作

Linux分类 haoduck 6个月前 (05-05) 410次浏览 0个评论

刚刚看有个老哥说用git一次push10万个文件报错了

稍稍思索了一下,文件多的时候可以分批操作

自己尝试了一下,确实是可以的

过程

首先创建了一个名为test的项目

git init test
cd test

接着创建数量比较多的文件,我就创建1000个稍微意思一下就行了

for ((i=0;i<1000;i++))
do
        touch test$i.txt
done

为了模拟比较真实的情况,也创建一些目录并在创建的目录里创建少量的文件

for ((i=0;i<10;i++))
do
        mkdir testdir$i
        for ((ii=0;ii<30;ii++))
        do
                touch testdir$i/test$ii.txt
        done
done

Linux/Git下对大量的文件分批操作

扩展

这里说一下ls命令还有head命令
ls功能就是列出当前目录下的文件和目录
head功能是显示文件的开头的内容

使用ls+grep命令只列出文件

ls命令是展示当前目录下的目录和文件

Linux/Git下对大量的文件分批操作

此时我的需求是只想列出文件

可以看到目录和文件的区别就是目录后有一个 /

那么只要把带 / 的排除,那就是只列出文件了

ls | grep -v /

head命令列出指定数量的文件

列出目录下全部文件的命令是

ls | grep -v /

我们想要在这之中选择前100个文件

ls | grep -v / | head -n 100

Linux/Git下对大量的文件分批操作

Git

假设我要将这100个文件进行git push的操作

那么我可以这样写

git add $(ls | grep -v / | head -n 100)
git commit -m "push 100 个文件"
git push origin master

Linux

假设我是在Linux下想要对这100个文件进行复制或者移动的操作

那么我可以这样写

# 复制
cp $(ls | grep -v / | head -n 100) ~/testdir/
# 移动
mv $(ls | grep -v / | head -n 100) ~/testdir/

进行下一批文件操作

前面我已经操作过100个文件了

现在需要操作第二批100个文件

Git

假设我要将第二批100个文件进行git push的操作

那么我可以这样写

git add $(ls | grep -v / | head -n 200)
git commit -m "push第二批 100 个文件"
git push origin master

使用git add当前目录下前200个文件,git add会自动排除没有改动的文件,理所当然操作的就是第二批100个文件了

Linux

假设我要将第二批100个文件进行复制或者移动的操作

那么我可以这样写

# 复制
cp -n $(ls | grep -v / | head -n 200) ~/testdir/
# 移动
mv -n $(ls | grep -v / | head -n 200) ~/testdir/

使用cp -nmv -n表示跳过同名文件,理所当然操作的就是第二批100个文件了

使用tail排除已经操作过的文件

假如我是一个强迫症

我不想在使用cpmv命令的时候加-n参数

我只想直接操作第二批第101~200的文件

我本来的想法是:对前200个文件使用grep排除一次前100个文件的操作

但是grep是对字符串的操作,假如有多个雷同文件名的文件那么可能会出错
比如有0202.txt、20200202.txt两个文件
排除0202.txt时会把20200202.txt也意外排除掉

所以这里再来说一下head的好兄弟tail

这兄弟俩功能和用法都相似,不过一个是头,一个是尾

就是字面意思,head是显示前面的内容,tail是显示后面的内容

那么我可以这样写

Git

git add $(ls | grep -v / | head -n 200 | tail -n 100)
git commit -m "push第二批 100 个文件"
git push origin master

Linux

# 复制
cp $(ls | grep -v / | head -n 200 | tail -n 100) ~/testdir/
# 移动
mv $(ls | grep -v / | head -n 200 | tail -n 100) ~/testdir/

第三批第四批第五批

head -n 200 | tail -n 100实际就是列出前200中的后100个文件

那么要第三个100,第四个100,第五个100就是以此类推

#第三个100
head -n 300 | tail -n 100

#第四个100
head -n 400 | tail -n 100

#第五个100
head -n 500 | tail -n 100

后言

不知道还有什么说的,以后想到再说


好鸭 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Linux/Git下对大量的文件分批操作
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址