关于linux目录层级过多导致无法复制完全文件的方法

一年前的项目,写了一个功能。大致就是从对方提供的接口文档中,根据一唯一字符来下载一个pdf文件。但是接口提供下载的是一个zip文件。下载下来之后我需要把这个zip解压,然后获取pdf的路径。返回给小程序。

遇到的问题:

上个月,linux服务器下载文件的硬盘分区被占满了。这时候就需要进行扩容。由于是linux服务器。则需要购买一块云盘。挂载到当前主机上。操作完了。正打算要一个命令scp -r 另一台主机备份的时候,懵逼了。。。报错too many links。

查了一下主机的文件类型  df -lhT

type 为ext4 新挂载的云盘是ext3

而ext3文件系统对目录有限制。查了一下目录信息。我 的god。快12万个目录了。每个文件夹要创建的时候都是要创建两个目录的。所以导致scp到其他ext3文件的硬盘的时候。报错。百度了一下解决办法,都是把文件系统更改为ext4的解决办法。但是脚本根本看不懂。我决定还是用其他方法。

用脚本把每个目录挨个复制,不行。。。

用程序把每个目录挨个复制。不行。。。

用tar命令把文件打包,成功。但是解压以后。mkdir出错..不行。。。

用最笨的方法,根据时间日期,一个一个文件夹scp。。。无奈文件实在太多。。。只能放弃。。。

快要崩溃了。就去健身房跑步。果然灵感来了。既然目录不能复制,而我们的目标只是里面的pdf文件。那我们直接把所有的pdf文件直接转移过来不就可以了吗?

用如下命令,把顶层目录下的pdf文件全部复制到一个文件夹中。

find /opt/workspace/ -name "*.pdf" |xargs -i cp {} /newmount/test01

之所以不是复制而不是mv。是为了留着备份。避免一次脚本失败导致数据丢失。

由于pdf文件名称是唯一编号.pdf 。当转移完之后,用程序遍历数据库中这唯一编号,对pdf文件进行分别分类的文件夹。这样就显得清晰很多。

这件事犯得最大错误就是学了一个多月的脚本,却不知道学以致用。要学会转移思路。条条大路通罗马,不忘初心,记得要实现的目标。各种方法相结合。会大大提高效率。

继续努力学习。技多不压身。不知道什么时候你学的的东西就会帮助你。



猜你喜欢

转载自blog.csdn.net/hey_gril/article/details/80603590
今日推荐