使用 bash 脚本遍历以逗号分隔的目录
Using bash script to iterate through comma separated directories
我正在使用 linux shell 脚本 (Debian) 来创建某些目录的备份。
它已经为一个目录工作:
#!/bin/bash
DIRNAME="directory1"
# This is the backup
tar cfv "_backups/NEW.tar" $DIRNAME > /dev/null 2>&1
...
# This is the restore
rm -rf $DIRNAME
tar xfv ...
现在我需要为多个逗号分隔的目录做备份和恢复。即:
#!/bin/bash
DIRNAMES="directory1,directory2,directory3,..."
问题:如何触发tar cfv
命令将$DIRNAMES
中的目录打包成一个tar以及如何我触发了 rm -rf
,因此它会在 tar 提取之前删除这些目录?
假设 none 目录的名称中有任何空格,只需将逗号转换为空格,并利用 shell分词。
dirs=${DIRNAMES//,/ }
set -f # disable glob expansion for safety
# This is the backup
tar cfv "_backups/NEW.tar" $dirs > /dev/null 2>&1 # do not quote $dirs
# This is the restore
rm -rf $dirs # do not quote $dirs
tar xfv ...
我正在使用 linux shell 脚本 (Debian) 来创建某些目录的备份。
它已经为一个目录工作:
#!/bin/bash
DIRNAME="directory1"
# This is the backup
tar cfv "_backups/NEW.tar" $DIRNAME > /dev/null 2>&1
...
# This is the restore
rm -rf $DIRNAME
tar xfv ...
现在我需要为多个逗号分隔的目录做备份和恢复。即:
#!/bin/bash
DIRNAMES="directory1,directory2,directory3,..."
问题:如何触发tar cfv
命令将$DIRNAMES
中的目录打包成一个tar以及如何我触发了 rm -rf
,因此它会在 tar 提取之前删除这些目录?
假设 none 目录的名称中有任何空格,只需将逗号转换为空格,并利用 shell分词。
dirs=${DIRNAMES//,/ }
set -f # disable glob expansion for safety
# This is the backup
tar cfv "_backups/NEW.tar" $dirs > /dev/null 2>&1 # do not quote $dirs
# This is the restore
rm -rf $dirs # do not quote $dirs
tar xfv ...