Linux 如何为bash编写脚本来归档目录并保留其名称?
对于我的uni,我需要编写一个简单的脚本,对几个目录进行备份,然后将它们移动到另一个目录。我对Linux非常陌生,所以我有点迷路了。在此之前,他们演示了如何使用tar进行归档,如何使用gzip进行压缩,所以我假设我需要这样做来备份。它也是初学者水平,所以脚本应该尽可能简单。 这是我的剧本:Linux 如何为bash编写脚本来归档目录并保留其名称?,linux,bash,Linux,Bash,对于我的uni,我需要编写一个简单的脚本,对几个目录进行备份,然后将它们移动到另一个目录。我对Linux非常陌生,所以我有点迷路了。在此之前,他们演示了如何使用tar进行归档,如何使用gzip进行压缩,所以我假设我需要这样做来备份。它也是初学者水平,所以脚本应该尽可能简单。 这是我的剧本: #!/bin/bash echo directories="work/ extract/ test/" for directory in $directories do t
#!/bin/bash
echo
directories="work/ extract/ test/"
for directory in $directories
do
tar --create --gzip --file= ~/backups "$directory".tgz $directory
done
这就是结果:
pi@raspberry:~ $ ./my_backup.sh
tar: Removing leading `/' from member names
tar (child): : Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: : Cannot write: Broken pipe
tar: Child returned status 2
tar: Error is not recoverable: exiting now
tar: Removing leading `/' from member names
tar (child): : Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: : Cannot write: Broken pipe
tar: Child returned status 2
tar: Error is not recoverable: exiting now
tar: Removing leading `/' from member names
tar (child): : Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: : Cannot write: Broken pipe
tar: Child returned status 2
tar: Error is not recoverable: exiting now
我只能猜测这和名字有关,因为我认为名字中不允许使用“/”,但我不知道如何删除它。我在大学论坛上问了这个问题,但没有人回答。
非常感谢您的帮助。我认为您可以将目录放入一个列表中,并通过for循环对其进行迭代。 所以不是
directories=“工作/提取/测试/”
写
目录=(“工作”“提取”“测试”)
如果您在与需要备份的目录相同的目录中使用该脚本,请执行以下操作:
我还没能测试它,但我认为它应该是这样工作的。
directories=“work/extract/test/”
是一个字符串,您需要一个数组来循环,它应该是directories=(“work/”“extract/”“test/”)
你的焦油线是假的。这里也没有运气:pi@raspberry:~$./my_backup.sh tar:从成员名称中删除前导/’tar:work.tgz:无法统计:没有这样的文件或目录tar(子项)::无法打开:没有这样的文件或目录tar(子项):错误不可恢复:立即退出tar::无法写入:断开的管道tar:子级返回状态2 tar:错误不可恢复:立即退出
没有运气:pi@raspberry:~$./my_backup.sh tar:从成员名称中删除前导/’tar:work.tgz:Cannot stat:没有这样的文件或目录tar(child)::无法打开:没有这样的文件或目录tar(child):错误不可恢复:立即退出tar::无法写入:损坏的管道tar:child返回状态2 tar:错误不可恢复:立即退出
是的,可以。谢谢你能告诉我set-e是什么意思吗?还有${directories[@]}
中的[@]
?我想我不会再编写更多的脚本了,但是理解它的工作原理很好。set-e
意味着当命令不返回0(true)时退出,${directories[@]}
是BASH中数组的语法。非常感谢。
#!/bin/bash
set -e
directories=(work extract test)
for directory in ${directories[@]}; do
tar -czf "${HOME}/backups/${directory}.tgz" "${directory}"
done