道歉,如果我是一个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
尝试搜索与此类似的问题但找不到任何内容。
提前谢谢。
答案 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