我的备份脚本有点问题。它使用for循环来使用tar对给定目录中的任何内容进行归档。它完美地列出了目录,并为每个目录创建了我希望它们是什么样的单独的归档,但是变量并没有列出要备份的目录的路径。有人能告诉我如何确保变量被正确的信息填充吗?
下面是剧本:
#!/bin/bash
set -xv
dirs=$(ls /home/phoenix/testarchive)
dest="/home/phoenix/backup/"
archive=".tar.bz2"
clear
echo "Archiving data..."
for dirs in $dirs
do
echo "Archiving $dirs..."
tar cjf "${dest}${dirs}_$(date +%F)${archive}" $dirs
echo "Archive complete!!"
done
echo "All archives created!!"
echo "Test created archive to ensure validity."
ls -lh $dest这是我的错误输出:
echo "Archiving data..."
+ echo 'Archiving data...'
Archiving data...
for dirs in $dirs
do
echo "Archiving $dirs..."
tar cjf "${dest}${dirs}_$(date +%F)${archive}" $dirs
echo "Archive complete!!"
done
+ for dirs in $dirs
+ echo 'Archiving folder1...'
Archiving folder1...
++ date +%F
+ tar cjf /home/phoenix/backup/folder1_2017-07-18.tar.bz2 folder1
tar: folder1: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
+ echo 'Archive complete!!'
Archive complete!!
+ for dirs in $dirs
+ echo 'Archiving folder2...'
Archiving folder2...
++ date +%F
+ tar cjf /home/phoenix/backup/folder2_2017-07-18.tar.bz2 folder2
tar: folder2: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
+ echo 'Archive complete!!'
Archive complete!!
echo "All archives created!!"
+ echo 'All archives created!!'
All archives created!!
echo "Test created archive to ensure validity."
+ echo 'Test created archive to ensure validity.'
Test created archive to ensure validity.
ls -lh $dest
+ ls -lh /home/phoenix/backup/
total 8.0K
-rw-r--r-- 1 phoenix phoenix 46 Jul 18 13:48 folder1_2017-07-18.tar.bz2
-rw-r--r-- 1 phoenix phoenix 46 Jul 18 13:48 folder2_2017-07-18.tar.bz2正如我刚才提到的,脚本的命名方式与我想要的完全一样,但是实际的数据存档并没有被创建。我确信ls是问题所在,但我不知道有什么其他方法可以得到预期的结果.
发布于 2017-07-18 18:32:34
简单地说,tar使用的是相对路径。我从这个错误信息中得出这个结论:
tar: folder1: Cannot stat: No such file or directory无论如何,我建议您把cd放到父目录中。在运行脚本之前,您可能可以通过cd来测试我的理论。
cd /home/phoenix/testarchive您必须小心备份文件的位置,因为它们也将放在当前目录中,除非您在tar语句中放置了路径。
发布于 2017-07-18 18:29:14
仔细阅读错误信息并理解它们总是很好的:
这意味着找不到folder1。为什么?folder1在哪里?它在/home/phoenix/testarchive目录中。执行脚本时,当前的工作目录是否在/home/phoenix/testarchive中?可能不会。
我建议这样写剧本:
#!/bin/bash
set -xv
dirs_basedir=/home/phoenix/testarchive
dest="/home/phoenix/backup"
archive=".tar.bz2"
clear
echo "Archiving data..."
for path in "$dirs_basedir"/*
do
basedir=${path%/*}
dir=${path##*/}
echo "Archiving $dir in $basedir..."
tar cjf "${dest}/${dirs}_$(date +%F)${archive}" -C "$basedir" "$dir"
echo "Archive complete!!"
done
echo "All archives created!!"
echo "Test created archive to ensure validity."
ls -lh $dest虽然这看起来可能比你的原版稍微复杂一些,但它更安全。
https://stackoverflow.com/questions/45174180
复制相似问题