为何脚本执行后,tbz压缩包未移入backups目录反而使其变为压缩文件?
问题原因与解决方法
错误1:tar命令的压缩参数使用错误
你在tar命令里直接写了bzip2,这是错误用法。tar的bzip2压缩需要通过选项指定,正确写法是用--bzip2(长选项)或者-j(短选项),否则bzip2会被当成要打包的文件/目录,导致tar行为异常。
正确的tar命令示例:
tar --create --verbose --bzip2 --file=$name $dir # 或者更简洁的短选项写法 tar cvjf $name $dir
错误2:未提前创建目标目录~/backups
执行mv $name ~/backups时,如果~/backups目录不存在,mv不会自动创建目录,而是会把$name文件重命名为backups。循环执行后,最后一次mv会覆盖之前的backups文件,最终得到的是一个名为backups的归档文件,而非目录。
解决方法是在脚本开头先创建目标目录(-p参数确保目录不存在时创建,存在时不报错):
mkdir -p ~/backups
修正后的完整脚本
#!/bin/bash # 提前创建备份目录 mkdir -p ~/backups echo "Declare directories to backup" read dir_list for dir in $dir_list do name="${dir}.tbz" # 修正后的tar命令 tar cvjf $name $dir mv $name ~/backups done
内容的提问来源于stack exchange,提问作者WDUK
相关产品推荐
相关产品推荐

