我需要在编辑(和覆盖)文件(通常是图像)之前对其进行备份。
目前我通过以下方式做到这一点:
cp file.jpg ~/BACKUP/file.jpg
exiv2 BLABLABLA file.jpg
我怎样才能用一个命令来做到这一点?
例如
AAalias file.jpg
其中AAalias
是别名或函数,并不重要,但这是形状我正在寻找:命令+文件名
答案1
使用 shell 函数:
backup_and_edit () {
cp -i "$1" "$HOME/BACKUP" &&
exiv2 BLABLABLA "$1"
}
这将放在您通常放置别名和 shell 函数的位置(可能在您的~/.bashrc
文件中),并且在实例化该函数之后(通过启动新的 shell 会话),您将像这样使用它
$ backup_and_edit ./some/file.jpg
当像这样调用时,该函数将执行
cp -i ./some/file.jpg "$HOME/BACKUP" &&
exiv2 BLABLABLA ./some/file.jpg
该-i
选项cp
将使实用程序在覆盖备份目录中同名的文件之前要求确认。如果复制失败,exiv2
则不会调用该命令。
答案2
您可以创建一个使用函数的别名:
alias Aalias='_(){ local file=${@: -1};(($#<2))||[[ ! -e "${file}" ]]&&echo "Usage: Aalias <options> <file>"&&return 1;cp "${file}" ~/BACKUP/${file};exiv2 $@;}; _'
${@: -1} grabs the last argument for the file
[[ ! -e "${file}" ]] checks to make sure the file exists
如果提供的参数少于 2 个或文件不存在,则会显示用法。
如果最后一个参数是存在的文件的名称,它将备份到用户主目录中的 BACKUP 目录,并且 exiv2 将使用命令行上提供的选项启动。