I'm Terry

Just another Coder and Designer


  • 首页

  • 分类

  • 归档

利用find命令筛选重复文件

发表于 2016-10-08   |   分类于 Linux   |  

今天遇到了一个问题,在同步百度云网盘的照片时,出现了混乱。我在本地删了很多照片,同时也给已存的照片改了名,按理说同步程序会把本地结果同步到云端。但是不知道怎么回事,程序又把云端的照片下载到本地了。这就使得目录下有了很多不同名的重复文件。而且数量很多,大概两千多张照片,这种情况下手动排除重复照片是很麻烦的一件事。想到自己的windows上装了CGWIN,所以尝试写了一个Shell命令来解决问题。没想到还成功了。

命令如下:

1
2
3
$ find -not -empty -type f -printf "%s\n" |sort -rn|uniq -d|xargs -I{} -n1 find -type f -size {}c -print > repeat.txt
$ mkdir REPEAT
$ cat repeat.txt|awk '{if(NR%2==0) print}'|xargs -I{} mv {} REPEAT

这里一个个讲解下:

  • find -not -empty -type f -printf "%s\n"是用find命令找出不为空的,类型为文件,将这些文件的大小按行打印出来。
    • -printf是find命令的格式化选项,都过这个选项可以打印出各种想要的东西。其中%s就是打印文件的大小.可以通过man find去查看详细内容。
  • 打印出所有文件的大小后,根据文件大小的数值进行降序排列后,然后使用uniq -d筛选出重复的文件大小数据。
  • xargs -I{} -n1 find -type f -size {}c -print是反向打印出文件名。我们通过前面的命令能够知道重复的文件大小数值。通过此命令可以通过文件大小的值,把重复的文件名筛选出来。
    • -size {}c后面的c指的是按bytes单位。
  • cat repeat.txt|awk '{if(NR%2==0) print}'|xargs -I{} mv {} REPEAT。将重复的文件名放入到一个文本中。通过筛选文本中的偶数行,就可以获取出那些重复的文件名,然后将其移动到新的文件夹中。

参考链接:

  • 利用Linux查找重复文件(shell脚本)
  • awk按照奇数行和偶数行进行处理

关于在内网服务器上搭建Python和Perl环境的两个问题

发表于 2016-09-27   |   分类于 Linux   |  

Python和Perl最为强大的高级脚本语言,其中很大一个亮点就是可以实现各种扩展。这两个语言在目前网络上都有大量的扩展模块。我们可以随时使用来简化我们的工作。

在开发过程,大家都习惯了两个语言的一些包管理工具,需要什么模块,直接一个命令就搞定了,例如Python的pip,Perl的cpan等等。但是在生产环境,或者说正式环境上。我们想安装扩展模块就没这么容易了。在现实环境中,并不像我们做开发测试那样方便通过网络安装模块,一般服务器都是内网隔离的,而且使用的用户都一定的权限设置,这就是说,你无法从网络安装模块,也不能使用系统权限将模块安装到默认路径中。这两个问题从很大程度上让我们再使用pip或者cpan这些工具不再那么方便。为了能更好地在正式环境上使用这些工具,我们需要解决两个问题。

1. 如何离线使用包管理工具安装扩展模块,不需要使用网络,同时完成依赖包的安装;
2. 如何将包安装到非系统权限路径

为了解决上面的两个问题,我们来分别介绍两个语言的解决方法。

阅读全文 »

对find,xargs,grep和管道的一些深入理解

发表于 2016-05-10   |   分类于 Linux   |  

本人算是一个爱深究的人,前段时间遇到了一个问题,感觉挺有意思,这两天好好的研究了一下。

问题

相信大家都知道在目录中搜索含有固定字符串文件的命令:

1
find . -name '*.py' |xargs grep test

刚开始的时候,我不熟悉xargs命令,所以直接使用的命令是

1
find . -name '*.py' |grep test

结果并不是自己所期望的。此命令只是找出文件名*.txt有test的情况。

这里我就研究一下,究竟xargs做了什么,使得结果不相同。

阅读全文 »

如何使用find和xargs完成高效的操作

发表于 2016-05-09   |   分类于 Linux   |  

最近从网上下了一批PSD资源文件。文件大多以ZIP格式保存。这要是按照原先的操作方式,我肯定一个一个的打开然后解压(用的是windows平台,能累死人)。后来在windows上搭建了cgwin环境,所以就想到用Linux的方式来完成操作,方便快捷。

阅读全文 »

VPS刚建立所需要做的操作

发表于 2016-03-14   |   分类于 Linux   |  

更改ROOT密码

使用VPS分配的root密码,以root身份登陆主机,然后执行

1
passwd root

依照提示即可更改主机root密码。

增加管理员权限的用户

直接使用root用户操作主机是非常不安全的,所以要建立其他的管理员用户。在Ubuntu中,可以使用

1
adduser admin

或者

1
useradd admin

虽然两个命令都可以建立新用户,但是优先使用adduser而不是useradd。adduser不但会建立新用户,还会建立与admin同名的组,还有/home下的同名目录,而useradd只是简单的建立了一个用户。

给新增用户添加管理员权限

新增用户后,该用户是没有管理员权限的,需要root用户为其分配。打开文件/etc/sudoers,找到

1
2
# User privilege specification
root ALL=(ALL) ALL

在下面新添加一行

1
admin ALL=(ALL) ALL

上面的admin就是新建用户名。

更改PS1变量

PS1变量控制着Linux中命令提示符的显示格式,我们可以自定义命令提示符的显示格式。

PS1变量中各种特殊符号所代表的意义

1
2
3
4
5
6
7
8
9
10
11
12
\d :代表日期,格式为weekday month date,例如:"Mon Aug 1"    
\H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux
\h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v :BASH的版本信息
\w :完整的工作目录名称。家目录会以 ~代替
\W :利用basename取得工作目录名称,所以只会列出最后一个目录
\# :下达的第几个命令
\$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$

Linux中命令行颜色的配置

提示符颜色的格式为:\e[字体样式;字体颜色;背景颜色m
提示符颜色结束的格式为:\e[0m
字体样式,字体颜色,背景颜色三者中间使用英语半角的分号隔开,三者都是数字代码。可以使用echo -e "\e[44;37;5m This is the Test LINE \e[0m"来查看效果。

改变PS1变量工具

其实PS1的设置命令很繁琐,设置出一个好看实用的PS1命令会很复杂,这里提供一个网站Bashrc Generator。里面可以通过拖拽的方式组合出自己想要的格式,之后直接生成PS1变量配置。

由源代码安装ruby时需要注意的

发表于 2016-03-07   |   分类于 Linux   |  

现代的Linux发行版都有自带的包管理工具,可以很方便的安装程序。但是Ubuntu包管理工具中的ruby版本太旧,导致Jekyll无法正确安装。为了使用最新的ruby,只能从源代码进行编译安装。

之前的一篇文章介绍了如何使用stow管理工具来管理由源代码编译安装的程序,如果有兴趣可以查看

  • 利用GNU stow工具管理源代码安装的程序

这里简单说一下安装ruby是所需要注意的几点:

  1. 安装ruby时请保证系统存在zlib库,否则会导致gem install报错。如果已经安装了ruby,可以不用重新编译,直接安装zlib即可。
  2. 安装ruby时请保证系统存在openssl库,缺少此库会导致gem install jekyll报错。而且如果已经编译了ruby,要重新编译安装,这个比较蛮烦。
  3. 在Ubuntu上,安装openssl所使用的命令是
    sudo apt-get install libssl-dev而非sudo apt-get install opnssl,后者是不起作用的。

利用GNU stow工具管理源代码安装的程序

发表于 2016-03-07   |   分类于 Linux   |  

经常使用Linux工作的人都知道,在Linux上安装程序方法有很多,一般来说相应的Linux发行版都有自己的包管理程序,可以统一管理程序,例如Ubuntu下的apt-get或者CentOS下的yum。但是有时候一些程序必须由源代码编译进行安装,例如:

  • 安装源中的程序版本过低,而我们需要使用最新的版本;
  • 包管理器中根本不存在相应的程序,这时候我们没有其他选择;
  • 有时候可以使用提前预编译好的程序,不过也会出现兼容性的问题;
  • 有我们要定制一些程序,那么只能从源头编译做起。

以上种种都说明从源代码编译安装程序都是日常工作中不可忽略的工作。

我们都知道一般由源代码安装程序时候,如果不对configure文件做配置,编译好的程序默认安装在/usr/local下面。其实这种方法存在几个缺陷:

  1. 当我们安装了很多程序时,/usr/local下面的子目录例如bin,lib,doc中会有一堆东西,你无法精确的分辨哪些程序是属于哪个源代码编译的,这在删除程序时就会很不方便。
  2. 如果/usr/local中已经存在了某个程序,安装新程序时如果出现冲突,会比较难办,你无法确定究竟以那个版本为准而保证两个程序都不受影响正常运行。

所以我一直在寻找能够对源代码安装的程序进行管理的方法。这几天在网上看到了其实GNU已经帮我们开发了这个东西,那就是GNU stow,通过这几天使用发现真的很好用,不但能管理程序,还能管理/home路径下的.隐藏配置文件。但不知道为什么网上资料貌似不是很多,所以在这里分享一下。

阅读全文 »

OpenGL笔记-初识OpenGL

发表于 2016-03-07   |  

LearnOpenGL Notes

Introduction of OpenGL

  • First of all, OpenGL is not actually an API, but merely a specification
    developed and maintained by Khronos Group. The OpenGL specification just specifies what the output and perform.
  • The implementations of actual OpenGL libraries are developed by graphics card manufacturers.
  • OpenGL is by itself a large state machine, change the state, you can get what you want to draw.
  • An object in OpenGL is a collection of options that represents a subset of OpenGL’s state.
  • OpenGL suggests using the Primitive Typesdefined by OpenGL instead of using primitive types defined by C standard grammer. This will ensure the applications work properly on multi-platforms.

LearnOpenGL笔记

OpenGL介绍

  • 首先,OpenGL并不是一个真正意义上的API,它是由 Khronos Group开发维护的一套技术规范。规范规定了OpenGL的输出是什么样和其如何表现等
  • 真正的API库是由各大显卡厂商开发实现的。
  • OpenGL本身实际上是一个巨大的状态机,通过改变不同的状态,可以让OpenGL去画出你想要的图形
  • OpenGL中的一个对象可以理解为OpenGL中某些状态的集合
  • OpenGL建议在使用时,尽量使用OpenGL中定义好的基础数据格式,而不是使用C标准语法中的数据格式,因为这样更有利于跨平台开发。

Ubuntu 9.10上建立ARM-Linux交叉编译环境

发表于 2014-12-16   |   分类于 C/C++   |  

这篇文章是我在2010年学习嵌入式的时候,自己动手建立交叉编译环境的一片文章。那时候获取信息没有那么丰富,也没有像现在这么多成熟的已经建立好的交叉编译环境,所以动手自己做的时候着实废了一番功夫。写完这篇文章后我就把它丢到了新浪博客上,再也没有看过它。直到最近整理博客才察觉了他的存在,现在整理一下发到目前的博客上。

文章上的东西离现在的技术已经有些过时,但是其中的方法还是值得看一下的,以此来纪念一下在大学里曾经奋斗过的日子!

阅读全文 »

使用网盘建造Git私有仓库

发表于 2014-12-15   |   分类于 Git   |  

Github是个好东西,但是好东西也有缺点,那就是免费用户不能使用私有库,我们不可能将所有的代码都设为共享,毕竟有些东西我们只是为了给自己使用,那么怎样才能既使用Git来管理自己的代码版本,又能使其在备份到网络上,且是私有的。这时候我们就要靠网盘了~

目前市面上的网盘可以说是各种各样,国外比较知名的有Dropbox,Google Drive,Sky Drive,国内的更是各大互联网厂商都有自己的网盘,百度云,快盘,酷盘,360网盘等等。在网盘的选择上,还是要看个人喜好,总体而言,从知名度和安全度上来讲,国外网盘有比较大的优势,切覆盖系统平台齐全,但是由于国内的网络环境,国外网盘能在国内使用的少之又少,如果不借助点工具,是基本使用不了的,这个时候只能选择国内的网盘。国内网盘本人使用的是金山快盘,原因就是容量大,且使用时间比较长, 各方面也还算满意。这里就讲一下如何利用金山快盘建立Git私有仓库。

阅读全文 »
12
Y.Tian

Y.Tian

生命不息,折腾不止

15 日志
5 分类
41 标签
RSS
github twitter weibo douban zhihu
Creative Commons
© 2014 - 2016 Y.Tian
由 Hexo 强力驱动
主题 - NexT.Muse