两种CP命令常见用法的快捷方式

发布时间:2025-04-14 点击:7
去年七月,我写了一篇关于 cp 命令的两种常见用法的文章:备份一个文件,以及同步一个文件夹的备份。
虽然这些工具确实很好用,但同时,输入这些命令太过于累赘了。为了解决这个问题,我在我的 bash 启动文件里创建了一些 bash 快捷方式。现在,我想把这些捷径分享给你们,以便于你们在需要的时候可以拿来用,或者是给那些还不知道怎么使用 bash 的别名以及函数的用户提供一些思路。
使用 bash 别名来更新一个文件夹的副本如果要使用cp来更新一个文件夹的副本,通常会使用到的命令是:
cp-r-u-vsource-folder destination-directory其中-r代表“向下递归访问文件夹中的所有文件”,-u代表“更新目标”,-v代表“详细模式”,source-folder是包含最新文件的文件夹的名称,destination-directory是包含必须同步的source-folder副本的目录。
因为我经常使用cp命令来复制文件夹,我会很自然地想起使用-r选项。也许再想地更深入一些,我还可以想起用-v选项,如果再想得再深一层,我会想起用选项-u(不知道这个选项是代表“更新”还是“同步”还是一些什么其它的)。
或者,还可以使用bash 的别名功能来将cp命令以及其后的选项转换成一个更容易记忆的单词,就像这样:
aliassync='cp -r -u -v'如果我将其保存在我的主目录中的.bash_aliases文件中,然后启动一个新的终端会话,我可以使用该别名了,例如:
syncpictures/media/me/4388-e5fe可以将我的主目录中的图片文件夹与我的 usb 驱动器中的相同版本同步。
不清楚sync是否已经定义了?你可以在终端里输入alias这个单词来列出所有正在使用的命令别名。
喜欢吗?想要现在就立即使用吗?那就现在打开终端,输入:
echoalias sync='cp -r -u -v'>>~/.bash_aliases然后启动一个新的终端窗口并在命令提示符下键入alias。你应该看到这样的东西:
me@mymachine~$ aliasalias alert='notify-send --urgency=low -i $([ $? = 0 ] && echo terminal || echo error) $(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')'alias egrep='egrep --color=auto'alias fgrep='fgrep --color=auto'alias grep='grep --color=auto'alias gvm='sdk'alias l='ls -cf'alias la='ls -a'alias ll='ls -alf'alias ls='ls --color=auto'alias sync='cp -r -u -v'me@mymachine:~$这里你能看到sync已经定义了。
使用 bash 函数来为备份编号若要使用cp来备份一个文件,通常使用的命令是:
cp--force--backup=numbered working-file backed-up-file其中--force代表“强制制作副本”,--backup= numbered代表“使用数字表示备份的生成”,working-file是我们希望保留的当前文件,backed-up-file与working-file的名称相同,并附加生成信息。
我们不仅需要记得所有cp的选项,我们还需要记得去重复输入working-file的名字。但当bash 的函数功能已经可以帮我们做这一切,为什么我们还要不断地重复这个过程呢?就像这样:
再一次提醒,你可将下列内容保存入你在家目录下的.bash_aliases文件里:
functionbackup{if[$#-ne1];thenechousage: $0 filenameelif[-f$1];thenechocp --force --backup=numbered $1 $1cp--force--backup=numbered$1$1elseecho$0: $1 is not a filefi}我将此函数称之为backup,因为我的系统上没有任何其他名为backup的命令,但你可以选择适合的任何名称。
第一个if语句是用于检查是否提供有且只有一个参数,否则,它会用echo命令来打印出正确的用法。
elif语句是用于检查提供的参数所指向的是一个文件,如果是的话,它会用第二个echo命令来打印所需的cp的命令(所有的选项都是用全称来表示)并且执行它。
如果所提供的参数不是一个文件,文件中的第三个echo用于打印错误信息。
在我的家目录下,如果我执行backup这个命令,我可以发现目录下多了一个文件名为checkcounts.sql.~1~的文件,如果我再执行一次,便又多了另一个名为checkcounts.sql.~2~的文件。
成功了!就像所想的一样,我可以继续编辑checkcounts.sql,但如果我可以经常地用这个命令来为文件制作快照的话,我可以在我遇到问题的时候回退到最近的版本。
也许在未来的某个时间,使用git作为版本控制系统会是一个好主意。但像上文所介绍的backup这个简单而又好用的工具,是你在需要使用快照的功能时却还未准备好使用git的最好工具。
结论在我的上一篇文章里,我保证我会通过使用脚本,shell 里的函数以及别名功能来简化一些机械性的动作来提高生产效率。
在这篇文章里,我已经展示了如何在使用cp命令同步或者备份文件时运用 shell 函数以及别名功能来简化操作。如果你想要了解更多,可以读一下这两篇文章:怎样通过使用命令别名功能来减少敲击键盘的次数以及由我的同事 greg 和 seth 写的shell 编程:shift 方法和自定义函数介绍。


如何创建有煽动性的CTA
企业官网建设有哪些原则需要遵守
企业网站设计开发前需要如何定位?
大牌企业自建企业商城的五种模式
提高与维持品牌形象的logo规范是什么?
上海网站制作最基础需要做到什么?
自适应页面布局方案
制作移动手机网站需要注意的八点?