Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Bash备份脚本。读取文件列表_Macos_Bash - Fatal编程技术网

Macos 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

如果我是bash新手,我道歉

我已经创建了一个运行良好的备份脚本。但是,我想简化一下,将文件列表读取并插入到
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