带有空格问题的bash副本

时间:2013-12-06 13:57:25

标签: bash

我正在尝试创建一个备份脚本,当我尝试复制时,无法以正确的方式处理空格。我到处搜索但找不到有效的解决方案。问题是当它试图复制文件“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

2 个答案:

答案 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