我正在尝试创建一个备份脚本,当我尝试复制时,无法以正确的方式处理空格。我到处搜索但找不到有效的解决方案。问题是当它试图复制文件“test whitespaces”时,它会将其解释为不同的文件。我的代码如下所示:
#!/bin/bash
cd /var/backup
number_of_files=$(ls |wc -l)
while [ $number_of_files -gt 9 ]
do
ls -t | tail -n -1 | xargs rm -rf
number_of_files=$(( $number_of_files -1 ))
done
mkdir temp
cd temp
number_of_home=$( ls / | grep home | wc -l)
i=1
while [ $i -lt $number_of_home ]
do
user=$(ls -l $(find /home$i -iname .backuprc) | cut -d ' ' -f 3)
mkdir $user
for file in "$(find /home$i -iname .backuprc -exec cat {} \; );"
do
cp "$file" /var/backup/temp/$user;
done
i=$(( $i + 1 ))
done
cd /var/backup
tar -czf $( date '+%k.%M.%S_%m%d%y').tar temp
rm -r /var/backup/temp
答案 0 :(得分:1)
尝试将IFS=$'\n'
添加到脚本的开头。这将导致空格不被视为字段分隔符。
答案 1 :(得分:0)
for file in "$(find /home$i -iname .backuprc -exec cat {} \;);"
do
cp "$file" /var/backup/temp/$user;
done
将其切换为:
find /home$i -iname .backuprc -exec cat {} \; | while read file; do
cp "$file" /var/backup/temp/$user;
done
或者:
find /home$i -iname .backuprc -exec cat {} \; | xargs -d '\n' cp -t /var/backup/temp/$user