本文共 3578 字,大约阅读时间需要 11 分钟。
bash cp 命令
去年七月,我写了 :备份文件和同步文件夹的辅助副本。
发现了这些出色的实用程序之后,我发现它们比必要的更为冗长,因此我在Bash Shell启动脚本中为其创建了快捷方式。 我以为我会分享这些快捷方式,以防它们对其他人有用,或者可以为尚未完全使用别名或shell函数的Bash用户提供灵感。
使用cp
更新文件夹的第二个副本的一般模式是:
cp -r -u -v SOURCE-FOLDER DESTINATION-DIRECTORY
其中-r
代表“递归访问所有文件的文件夹”, -u
代表“更新目标”, -v
代表“详细模式”, SOURCE-FOLDER
是包含最多更新内容的文件夹的名称最新信息,并且DESTINATION-DIRECTORY
是包含必须同步的SOURCE-FOLDER
副本的目录。
我很容易记住-r
选项,因为在复制文件夹时经常使用它。 我可能需要付出更多的努力才能记住-v
,甚至付出更多的努力就可以记住-u
(它是“更新”还是“同步”或…)。
或者,我可以使用的将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
别名。
使用cp
备份文件的一般模式是:
cp --force --backup =numbered WORKING-FILE BACKED-UP-FILE
-- force
表示“无论如何都进行复制”, -- backup=numbered
表示“使用数字表示备份的生成”, WORKING-FILE
是我们希望保留的当前文件, BACKED-UP-FILE
与WORKING-FILE
具有相同的名称,并将附加生成信息。
除了记住cp
命令的选项外,我们还需要记住第二次重复WORKING-FILE
名称。 但是,当可以为我们处理这些开销时,为什么要重复我们自己:
同样,您可以将其保存到主目录中的.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
命令的同步和备份功能的具体示例。 如果您想了解更多有关此内容的信息,请阅读上面引用的两篇文章: 和 我的同事Greg和Seth撰写 , 分别。
翻译自:
bash cp 命令
转载地址:http://funzd.baihongyu.com/