Macos Bash备份脚本。读取文件列表
如果我是bash新手,我道歉 我已经创建了一个运行良好的备份脚本。但是,我想简化一下,将文件列表读取并插入到Macos Bash备份脚本。读取文件列表,macos,bash,Macos,Bash,如果我是bash新手,我道歉 我已经创建了一个运行良好的备份脚本。但是,我想简化一下,将文件列表读取并插入到rsync中,或者将另一个脚本文件中的文件列表读取到rsync中 原因是我可以轻松地更改文件列表,而无需重写脚本。正如现在一样,我有在每个rsync命令中写入的所有文件列表 例如: 这基本上就是我现在写的 #/bin/bash bakdir=~/backup mkdir-p$bakdir mkdir-p“$bakdir”/Documents cd~/文件 rsync-a--进度文档1.do
rsync
中,或者将另一个脚本文件中的文件列表读取到rsync
中
原因是我可以轻松地更改文件列表,而无需重写脚本。正如现在一样,我有在每个rsync命令中写入的所有文件列表
例如:
这基本上就是我现在写的
#/bin/bash
bakdir=~/backup
mkdir-p$bakdir
mkdir-p“$bakdir”/Documents
cd~/文件
rsync-a--进度文档1.doc Document2.doc“$bakdir”/Documents
mkdir-p“$bakdir”/Stuff
cd~/东西
rsync-a--progress Folder1 MyApp.app Document.doc“$bakdir”/Stuff
我想要达到的目标
mkdir -p "$bakdir"/Documents
cd ~/Documents
list1=
Document1.doc
Document2.doc
rsync -a --progress $list1 "$bakdir"/Documents
mkdir -p "$bakdir"/Stuff
cd ~/Stuff
list2=
Folder1
MyApp.app
Document.doc
rsync -a --progress $list2 "$bakdir"/Stuff
尝试搜索类似于此的问题,但找不到任何内容
提前感谢。将文件名放入数组:
list1=("Document1.doc" "Document2.doc")
然后展开阵列:
rsync -a --progress "${list1[@]}" "$bakdir"/Documents
使用数组而不是字符串的原因是,如果任何文件名包含空格,它都能正常工作。您使用
rsync
似乎很不寻常,这表明只允许rsync
复制差异是正常的
您可以使用以下选项:-
--files-from=FILE read list of source-file names from FILE
我从未实际使用过此选项(尽管我使用了相关的--exclude from=FILE
选项)
阅读
rsync
的man
页面,将文件名存储在文本文件(即“mydata.txt”)中,格式如下:
Documents Document1.doc Document2.doc
Stuff Folder1 MyApp.txt
并执行以下脚本(myscript):
使用$d作为目录,$fs作为文件列表,参数为mkdir、rsync。。。就像你的问题一样
执行命令行是:
myscript < mydata.txt
myscript
使用Time Machine有什么问题?rsync可以配置为仅复制两个位置之间的更改;这就是你想要做的吗?我想写一个脚本,自动备份和恢复我选择的文件。这比在Time Machine界面中单独选择要还原的文件要快得多。谢谢!我试试看。但我想要实现的是在列表中轻松复制和粘贴文件,而无需任何格式,例如添加引号。像这样:Folder1 MyApp.app Document.doc我可以通过复制文件并粘贴到文本编辑器(如TextMate)来实现这一点。啊,我丢失了格式。我的意思是像我的示例中那样的文件列表,如果不更改为一行并添加引号(这将花费很长时间处理脚本中的文件量),就不能在多行上执行这样的变量赋值。每一行都是一个单独的命令。您应该能够在编辑器中使用正则表达式替换来更改它。如果它不寻常,我不会感到惊讶!感谢您的选择,我将查看人
myscript < mydata.txt