Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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
Linux 如何为bash编写脚本来归档目录并保留其名称?_Linux_Bash - Fatal编程技术网

Linux 如何为bash编写脚本来归档目录并保留其名称?

Linux 如何为bash编写脚本来归档目录并保留其名称?,linux,bash,Linux,Bash,对于我的uni,我需要编写一个简单的脚本,对几个目录进行备份,然后将它们移动到另一个目录。我对Linux非常陌生,所以我有点迷路了。在此之前,他们演示了如何使用tar进行归档,如何使用gzip进行压缩,所以我假设我需要这样做来备份。它也是初学者水平,所以脚本应该尽可能简单。 这是我的剧本: #!/bin/bash echo directories="work/ extract/ test/" for directory in $directories do t

对于我的uni,我需要编写一个简单的脚本,对几个目录进行备份,然后将它们移动到另一个目录。我对Linux非常陌生,所以我有点迷路了。在此之前,他们演示了如何使用tar进行归档,如何使用gzip进行压缩,所以我假设我需要这样做来备份。它也是初学者水平,所以脚本应该尽可能简单。 这是我的剧本:

    #!/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