bash cp 命令
去年七月,我为cp命令写了两个很好的用法 :备份文件和同步文件夹的辅助副本。
发现了这些出色的实用程序之后,我发现它们比必要的更为冗长,因此我在Bash Shell启动脚本中为其创建了快捷方式。 我以为我会分享这些快捷方式,以防它们对其他人有用,或者可以为尚未完全使用别名或shell函数的Bash用户提供灵感。
更新文件夹的第二个副本– Bash别名
使用cp
更新文件夹的第二个副本的一般模式是:
cp -r -u -v SOURCE-FOLDER DESTINATION-DIRECTORY
其中-r
代表“递归访问所有文件的文件夹”, -u
代表“更新目标”, -v
代表“详细模式”, SOURCE-FOLDER
是包含最多更新内容的文件夹的名称最新信息,并且DESTINATION-DIRECTORY
是包含必须同步的SOURCE-FOLDER
副本的目录。
我很容易记住-r
选项,因为在复制文件夹时经常使用它。 我可能需要付出更多的努力才能记住-v
,甚至付出更多的努力就可以记住-u
(它是“更新”还是“同步”或…)。
或者,我可以使用Bash中的别名功能将cp
命令和选项转换为更难忘的内容,例如:
alias sync = 'cp -r -u -v'
如果将其保存在主目录的.bash_aliases
文件中,然后启动新的终端会话,则可以使用别名,例如:
sync Pictures / media / me / 4388 -E5FE
使主目录中的“图片”文件夹与USB驱动器中的图片文件夹同步。
不确定是否已经定义了sync
别名? 您可以通过在终端窗口的命令提示符下键入“ alias
”一词来列出所有当前定义的别名。
如此喜欢您只是想立即开始使用它? 打开一个终端窗口并输入:
echo "alias sync='cp -r -u -v'" >> ~ / .bash_aliases
然后启动一个新的终端窗口,并在命令提示符下键入alias
。 您应该会看到以下内容:
me
@ mymachine~$
alias
alias
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
文件中。
function backup
{
if
[
$#
-ne
1
] ;
then
echo
"Usage: $0 filename"
elif
[
-f
$1
] ;
then
echo
"cp --force --backup=numbered $1 $1"
cp
--force
--backup =numbered
$1
$1
else
echo
"$0: $1 is not a file"
fi
}
之所以将此功能称为“备份”,是因为我的系统上没有其他称为“备份”的命令,但是您可以选择任何适合的名称。
第一个if
语句检查以确保仅向函数提供一个参数,否则使用echo
命令打印正确的用法。
elif
语句检查以确保提供的参数是文件,如果是,它将(详细地)使用第二个echo
来打印要使用的cp
命令,然后执行它。
如果单个参数不是文件,则第三个echo
将显示一条错误消息以达到此效果。
在我的主目录中,如果我执行在checkCounts.sql
文件中定义的backup
命令, checkCounts.sql
看到backup
创建了一个名为checkCounts.sql.~1~
的文件。 如果再次执行它, checkCounts.sql.~2~
看到一个新文件checkCounts.sql.~2~
。
成功! 按照计划,我可以继续编辑checkCounts.sql
,但是如果我经常用备份对其快照,则在遇到麻烦时可以返回到最新快照。
在某个时候,最好开始使用git
进行版本控制,但是当您需要创建快照但还没有准备好git
时,上面定义的backup
是一个很好的廉价工具。
结论
在上一篇文章中,我向您保证,通过使用Shell脚本,Shell函数和Shell别名,可以轻松地简化重复性任务。
在这里,我展示了使用Shell别名和Shell函数简化cp
命令的同步和备份功能的具体示例。 如果您想了解更多有关此内容的信息,请阅读上面引用的两篇文章: 如何使用别名和Shell脚本 在命令行中保存击键 :我的同事Greg和Seth撰写的shift方法和自定义函数简介 , 分别。
翻译自: https://opensource.com/article/18/1/two-great-uses-cp-command-update
bash cp 命令