Sorry, this entry is only available in 中文.
Tag: Shell
Fix mintty doesn’t start on MSYS
Sorry, this entry is only available in 中文.
Get progress and speed of dd in Linux
Sorry, this entry is only available in 中文.
Permission bug for VBScript in Cygwin
Sorry, this entry is only available in 中文.
Guide for migrating financial data from EasyMoney to Feidee
Sorry, this entry is only available in 中文.
Linux中拷贝目录跳过指定文件的方法
本文同步自(如浏览不正常请点击跳转):https://zohead.com/archives/linux-copy-directory-ignore-files/ 近日在 Linux 环境中做版本迁移的时候遇到一个问题:需要将一个目录遍历拷贝到另一个目录中,但需要忽略其中的某些文件,由于目录中东西比较多,忽略的项也不好一一指定。普通的 cp 命令并没有排除某个文件或文件夹的参数,比较丑陋点可以 cp -r 拷贝完目录之后再去删除无用的,但如果做批量脚本操作就不爽了,经过实际试验之后暂时找到两个比较好的方法。 1、使用 rsync 进行拷贝: rsync 本来是文件同步备份的工具,相对于普通的 cp 命令,rsync 在控制方面就强多了,而且 rsync 对遍历目录也支持,有 --exclude 参数可以忽略指定的文件或文件夹。 rsync -vaP --exclude=”.*” --exclude=”Makefile” dir1 /home/dir2 如上面演示的就可以排除掉隐藏文件和 Makefile 文件,-a 参数已经包含遍历处理参数 -r。 2、使用 find 加 cpio 进行拷贝: 备注:此方法来自 Advanced Bash-Scripting Guide,需要了解的童鞋自己去参考了。 用过 find 的童鞋都知道,find 对文件的过滤那是非常强大的,配合 cpio 来进行目录的遍历拷贝就可以实现过滤指定的文件或文件夹,当然也可以做到只备份特定的文件或文件夹,你可以用 find 的各种过滤参数达到拷贝哪天的文件,拷贝近期更改的文件等特殊效果,而且 find 支持正则表达式,这种方式想比第一种使用 rsync 跳过文件的方式更加灵活,因此非常推荐使用此方式进行目录拷贝。 cd dir1 find . -regextype posix-egrep -mindepth 1 ! -regex ‘./(dev|tmp)($|/.*)’ ! -name Makefile -a ! -name .svn | cpio -admvp /home/dir2 小解释下: find 的 -regextype 参数指定正则表达式类型,posix-egrep 为 egrep 用的扩展正则表达式,-mindepth 使 find 的输出中不包括目录本身,-regex 参数指定过滤的文件的正则表达式,-regex 前面的感叹号表示跳过,’./(dev|tmp)($|/.*)’ 这个正则表达式即表示跳过目录中的第一层 dev 和 tmp 目录以及下面所有的文件和文件夹,最后两个 -name 指定要跳过文件名为 Makefile 和 .svn 的文件,这样在备份版本库的时候非常有用。 cpio 命令将 find 的输出文件列表依次拷贝到 /home/dir2 目标目录中,-a 表示不更新文件的访问时间,-d 指定自动创建目录,-m 指定保留文件的修改时间,-p 指定 cpio 工作在 Copy-pass 模式,这是专门用来拷贝目录树的一种模式。 PS:如果有更加简单的方法,欢迎提出指正哦~~~ ^_^
刚迷上screen就不得不马上移情tmux
本文同步自(如浏览不正常请点击跳转):https://zohead.com/archives/terminal-screen-and-tmux 一个星期之前调试代码时用上 GNU screen,这个多终端模拟器,对我而言很大程度上摆脱了调试时必须开N个 SecureCRT 远程登录标签的郁闷,而且很多 Linux 发行版上都已经自带 screen 包,直接安装即可,也可以在这下载自己编译: http://www.gnu.org/software/screen/ screen 的快捷键操作非常简单(文本模式下的 Linux 必须要N多快捷键的说),安装之后,在一个终端里运行 screen 命令就可以启动,可以在一个终端里再创建新的 shell,使用快捷键在不同的 shell 之间切换,使用 screen 的 detach shell 可实现更好的后台任务处理,用起来还是比较 happy,无奈 GNU screen 也有一些缺陷: 1、不支持在一个 shell window 里再拆分子窗口,也就是像 vim 的多窗口编辑效果; 2、对 xterm 终端支持一般; 3、不能自己根据启动 screen 时的窗口大小调节新 shell 的大小,这个小郁闷; …… 今天看到一哥们分享的 tmux 终端复用工具,立马感觉我要不淡定的移情了,在此下载: http://sourceforge.net/projects/tmux/ tmux 对比 screen 的优点:单个 shell window 拆分很强大,移动切换 shell pane 很强大,完美支持 xterm 终端和集成原 shell 大小,BSD license,命名 shell window,OOO,受不了先上图: 图中是我实际使用的一个环境,pane 0 查看 man 帮助,pane 1 修改代码,pane 2 命令操作,pane 3 监控系统。 tmux 的快捷键和 screen 的有点类似,只是初始快捷键改为了 Ctrl+B: Ctrl-B-C :创建新窗口; Ctrl-B-D :detach窗口,和 screen 的类似; Ctrl-B-” :将当前窗口拆分为上下两行; Ctrl-B-%:将当前窗口拆分为左右两列; Ctrl-B-上下左右:切换 shell pane …… 具体请看 man tmux,果断强烈推荐了,tmux现在除了不是在每个 Linux 发行版中默认就附带这点似乎没有什么相比 screen 的缺点了(不过我还是下到了编译好的 RHEL6 上的 RPM 包,哈哈)。 tmux得在以后使用时继续研究咯,screen暂时抛弃,玩的开心~~~ ^_^