Bash备份脚本。阅读文件列表

时间:2015-05-24 07:33:05

标签: macos bash

道歉,如果我是一个bash新手!

我创建了一个工作正常的备份脚本。但是,我希望通过读取和插入文件列表到rsync或从另一个脚本文件中读取文件列表到rsync来简化它。

原因是这样我可以轻松更改文件列表而无需重写脚本。现在我拥有每个rsync命令中写入的所有文件列表。

示例:

这基本上就是我现在写的

# !/bin/bash
bakdir = ~/backup
mkdir -p $bakdir

mkdir -p "$bakdir"/Documents
cd ~/Documents
rsync -a --progress Document1.doc Document2.doc "$bakdir"/Documents

mkdir -p "$bakdir"/Stuff
cd ~/Stuff
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

尝试搜索与此类似的问题但找不到任何内容。

提前谢谢。

3 个答案:

答案 0 :(得分:0)

将文件名放在数组中:

list1=("Document1.doc" "Document2.doc")

然后展开数组:

rsync -a --progress "${list1[@]}" "$bakdir"/Documents

使用数组而不是字符串的原因是,如果任何文件名包含空格,它将正常工作。

答案 1 :(得分:0)

您对rsync的使用似乎相当不寻常,因为建议仅允许rsync复制差异是正常的。

您可以使用选项: -

--files-from=FILE       read list of source-file names from FILE

我从未真正使用过这个(虽然我使用了相关的--exclude-from=FILE选项)。

阅读man

rsync页面

答案 2 :(得分:0)

将文件名存储在文本文件中(即“mydata.txt”),格式为:

Documents Document1.doc Document2.doc
Stuff Folder1 MyApp.txt

并执行以下脚本(myscript):

while read d fs; do
  cd ~/$d
  mkdir ~/backup/$d
  rsync ... $fs
done

使用$ d作为目录,$ fs作为文件列表,参数mkdir,rsync,...就像你的问题一样。

执行命令行是:

myscript < mydata.txt