Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带空格的bash复制问题_Bash - Fatal编程技术网

带空格的bash复制问题

带空格的bash复制问题,bash,Bash,我正在尝试创建备份脚本,但在尝试复制时无法让inte以正确的方式处理空白。我到处都找了,但找不到有效的解决方案。问题是,当它试图复制文件“testwhitespaces”时,它会将其解释为不同的文件。我的代码如下所示: #!/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_o

我正在尝试创建备份脚本,但在尝试复制时无法让inte以正确的方式处理空白。我到处都找了,但找不到有效的解决方案。问题是,当它试图复制文件“testwhitespaces”时,它会将其解释为不同的文件。我的代码如下所示:

#!/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

尝试将
IFS=$'\n'
添加到脚本的开头。这将导致空间不被视为字段分隔符

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