Linux Shell脚本:在维护目录位置的同时备份和还原文件

Linux Shell脚本:在维护目录位置的同时备份和还原文件,linux,bash,shell,scripting,backup,Linux,Bash,Shell,Scripting,Backup,我希望编写一个Linux shell脚本,以便对我的项目文件夹中的所有源代码执行备份和还原(.c、.cpp、.java等) 我的脚本会删除所有这些源代码文件,如果需要,我希望能够轻松地恢复这些文件 以下是我现在正在做的事情: #copy the entire directory to a backup folder cp -r $CLEANUP_PATH $BACKUP_PATH #delete the project and copy from backup to restore sourc

我希望编写一个Linux shell脚本,以便对我的项目文件夹中的所有源代码执行备份和还原(.c、.cpp、.java等)

我的脚本会删除所有这些源代码文件,如果需要,我希望能够轻松地恢复这些文件

以下是我现在正在做的事情:

#copy the entire directory to a backup folder
cp -r $CLEANUP_PATH $BACKUP_PATH

#delete the project and copy from backup to restore source code
rm -rf $CLEANUP_PATH
cp -r $BACKUP_PATH $CLEANUP_PATH
该项目约为600MB,因此执行这些操作需要很长时间


如何从备份中仅恢复源代码(而不是整个目录),并确保每个文件都恢复到每个文件所属的特定目录中?

考虑使用
tar
:它会记住有关文件的所有信息,包括路径、权限和日期。如果源代码位于几个目录中,则可以按名称从tar文件中提取这些目录。

考虑使用
tar
:它会记住有关文件的所有信息,包括路径、权限和日期。如果源代码位于几个目录中,则可以按名称从tar文件中提取这些目录。

考虑使用版本控制。它会记住文件的所有内容,包括路径、权限、日期和以前的修订。这不仅会阻止灾难恢复,而且会使您成为一名更好的开发人员(出于各种原因)

当然,假设您不希望提交/保存目录中的内容。如果您想保存所有内容(请不要保存二进制文件/库/其他生成或可生成的文件!),那么您可以
git-add.

完成一些工作后,请签入更改

git status
git commit -a -m "Descriptive comment about changes"
如果删除目录,还可以克隆git存储库。系统外克隆,以防删除机器

git clone ssh://hostname/path/to/repository

考虑使用版本控制。它会记住文件的所有内容,包括路径、权限、日期和以前的修订。这不仅会阻止灾难恢复,而且会使您成为一名更好的开发人员(出于各种原因)

当然,假设您不希望提交/保存目录中的内容。如果您想保存所有内容(请不要保存二进制文件/库/其他生成或可生成的文件!),那么您可以
git-add.

完成一些工作后,请签入更改

git status
git commit -a -m "Descriptive comment about changes"
如果删除目录,还可以克隆git存储库。系统外克隆,以防删除机器

git clone ssh://hostname/path/to/repository


为什么不直接使用源代码管理呢?
cp-r
复制点文件吗?i、 e..exrc等?@Carl-这里的目的是删除源代码以保护知识产权。备份/恢复功能主要用于内部测试。如果我弄错了,请纠正我,但我相信使用源代码管理将是一种相当慢的方法。@Sheller-我尝试过的方法之一是:查找$CLEANUP_PATH-iname“*.c”-exec cp{}{}.bkup\;但是,当我从备份中恢复时,这不会维护文件来自的目录。cp-r递归复制一个目录,包括根目录和所有子目录中的每个文件。为什么要复制然后删除?如果目标和源在同一个物理设备上,使用mv会快得多。为什么不使用源代码管理呢?
cp-r
复制点文件吗?i、 e..exrc等?@Carl-这里的目的是删除源代码以保护知识产权。备份/恢复功能主要用于内部测试。如果我弄错了,请纠正我,但我相信使用源代码管理将是一种相当慢的方法。@Sheller-我尝试过的方法之一是:查找$CLEANUP_PATH-iname“*.c”-exec cp{}{}.bkup\;但是,当我从备份中恢复时,这不会维护文件来自的目录。cp-r递归复制一个目录,包括根目录和所有子目录中的每个文件。为什么要复制然后删除?如果目标和源位于同一个物理设备上,使用mv会快得多。例如,如果我想从/home/username/PROJECT_文件夹中查找和备份所有.c文件,语法会是什么样子?
tar zcvf/tmp/mybackup.tar.gz/home/username/PROJECT_FOLDER/*.c
谢谢,但这就是我需要的语法:
tar-zcvf${BACKUP\u PATH}/c\u BACKUP.tar find${CLEANUP\u PATH}-name“*.c”
如何提取这些文件以将它们恢复到它们来自的目录,而不覆盖这些目录中的其他现有文件?不管怎样,我已经找到了答案
tar-xzvf c_backup.tar-c${CLEANUP_PATH}
如果我想从/home/username/PROJECT_文件夹中查找和备份所有.c文件,例如,语法会是什么样子?
tar zcvf/tmp/mybackup.tar.gz/home/username/PROJECT_FOLDER/*.c
谢谢,但这就是我需要的语法:
tar-zcvf${backup_PATH}/c_backup.tar find${CLEANUP_PATH}-name“*.c”
如何提取这些文件以将它们还原到它们来自的目录,而不覆盖这些目录中的其他现有文件?不管怎样,我已经解决了
tar-xzvf c_backup.tar-c${CLEANUP_PATH}
在我工作的地方,我们使用TortoiseSVN。我不确定它是否具有与您提到的git相同的功能,但我会研究它。谢谢。虽然我在推广git而不是svn,但到目前为止,两者都比“tar”和“cp”更高级,无法区分。subversion命令会有所不同,您可能需要帮助为您的项目设置一个新的存储库。我不确定它是否具有与您提到的git相同的功能,但我会研究它。谢谢。虽然我在推广git而不是svn,但到目前为止,两者都比“tar”和“cp”更高级,无法区分。subversion命令会有所不同,您可能需要获得新reposi的帮助