去年7月,我写了一篇cp命令两种常见用法的文章:备份文件和同步文件夹备份。虽然这些工具确实很好用,但同时,输入这些命令也太麻烦了。为了解决这个问题,我在我的Bash启动文件中创建了一些Bash快捷方式。现在,我想把这些快捷方式分享给大家,以便大家在需要的时候可以使用,或者为不知道如何使用Bash的别名和函数的用户提供一些思路。使用Bash别名更新文件夹的副本如果你想使用cp更新文件夹的副本,你通常使用的命令是:cp-r-u-vSOURCE-FOLDERDESTINATION-DIRECTORY其中-r代表“递归访问文件”downfolder”,-u用于“更新目标”,-v用于“详细模式”,SOURCE-FOLDER是包含最新文件的文件夹的名称,DESTINATION-DIRECTORY是包含SOURCE-FOLDER副本的目录,必须同步。由于我经常使用cp命令来复制文件夹,自然会想到使用-r选项。也许想得深一点,我也可以想到使用-v选项,如果我想得更深一点,我可以想到使用选项-u(不知道这个选项是代表“update”还是“同步”或其他)。或者,您可以使用Bash的别名功能将cp命令及其选项转换为更容易记住的词,例如:aliassync='cp-r-u-v'如果我将其保存在我的主目录中的.bash_aliases文件中,然后启动一个新的终端会话,我可以使用别名,例如:syncPictures/media/me/4388-E5FE可以将我的主目录中的图片文件夹与我的USB驱动器中的相同版本同步。不确定同步是否已经定义?您可以在终端中输入单词alias以列出所有正在使用的命令别名。喜欢它?想马上使用吗?所以现在打开一个终端,输入:echo"aliassync='cp-r-u-v'">>~/.bash_aliases然后启动一个新的终端窗口并在命令提示符下输入别名。你应该看到这样的东西:me@mymachine~$aliasaliasalert='notify-send--urgency=low-i"$([$?=0]&&echoterminal||echoerror)""$(history|tail-n1|sed-e'\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'aliasegrep='egrep--color=auto'aliasfgrep='fgrep--color=auto'aliasgrep='grep--color=auto'aliasgvm='sdk'aliasl='ls-CF'aliasla='ls-A'aliasll='ls-alF'aliasls='ls--color=auto'aliassync='cp-r-u-v'me@mymachine:~$这里可以看到sync已经定义好了。使用Bash函数对备份进行编号要使用cp备份文件,通常使用的命令是:cp--force--backup=numberedWORKING-FILEBACKED-UP-FILE其中--force代表“强制复制”,--backup=numbered代表“用数字表示备份世代”,WORKING-FILE是我们要保留的当前文件,BACKED-UP-FILE与WORKING-FILE同名,带有额外的世代信息。我们不仅需要记住所有的cp选项,我们还需要记住重复WORKING-FILE的名称。但是,当Bash的功能已经可以为我们完成时,为什么我们还要继续重复这个过程呢?像这样:同样,您可以将以下内容保存到主目录中的.bash_aliases文件中:functionbackup{if[$#-ne1];thenecho"Usage:$0filename"elif[-f$1];thenecho"cp--force--backup=numbered$1$1"cp--force--backup=numbered$1$1elseecho"$0:$1isnotafile"fi}我称此函数为备份,因为在我的系统上没有任何其他命令称为备份,但你可以选择任何适合你的名字。第一个if语句用于检查是否只提供了一个参数,否则,它将使用echo命令打印出正确的用法。elif语句用于检查提供的参数是否指向文件,如果是,它会使用第二个echo命令打印所需的cp命令(所有选项都是完全限定的)并执行它。如果提供的参数不是文件,则文件中的第三个echo用于打印错误消息。在我的家目录下,如果执行备份命令,可以发现目录下有一个名为checkCounts.sql.~1~的文件。如果我再次执行它,将会有另一个名为checkCounts.sql.~2~files的文件。有效!正如预期的那样,我可以继续编辑checkCounts.sql,但如果我可以经常使用此命令为文件拍摄快照,那么在遇到问题时我可以回退到最新版本。也许在未来的某个时候,使用git作为版本控制系统是个好主意。但是像上面介绍的备份这样一个简单易用的工具是当你需要使用快照功能但又不准备使用git时最适合你的工具。结论在我的上一篇文章中,我确保通过使用脚本、shell函数和别名来简化一些机械操作来提高工作效率。在本文中,我展示了如何使用shell函数和别名来简化使用cp命令同步或备份文件时的操作。如果你想了解更多,可以阅读这两篇文章:HowtoReduceKeystrokesbyUsingCommandAliasesandShellProgramming:AnIntroductiontotheshiftMethodandCustomFunctionsbymycolleaguesGregandSeth。
