FreeBSD Bash awk$11到行尾添加\在空格之前?

FreeBSD Bash awk$11到行尾添加\在空格之前?,bash,awk,rsync,freebsd,chown,Bash,Awk,Rsync,Freebsd,Chown,我一直在拼命想让这件事成功 我正在编写一个rsync备份脚本,用于freebsd。我在远程服务器上没有root权限,我需要在远程服务器上很好地对文件进行mv和cp操作,因此一旦恢复它们,我就失去了所有权 我正在尝试创建一个权限文件,以备份所有权限和所有权,以便在完成数据还原后重新应用 这是备份代码 find /dir -ls >> output_file 这是还原代码 for f in `cat output_file|awk '{print $11}'` ; do chown `

我一直在拼命想让这件事成功

我正在编写一个rsync备份脚本,用于freebsd。我在远程服务器上没有root权限,我需要在远程服务器上很好地对文件进行mv和cp操作,因此一旦恢复它们,我就失去了所有权

我正在尝试创建一个权限文件,以备份所有权限和所有权,以便在完成数据还原后重新应用

这是备份代码

find /dir -ls >> output_file
这是还原代码

for f in `cat output_file|awk '{print $11}'` ; do chown `cat output_file|grep $f\$|awk '{print $5 ":" $6}'` $f ; done
这是输出文件的一个示例

 23319     3857 -rwxrwxrwx    1 root                         root                          1867545 Jan  9 22:55 /mnt/Tank2/Users/root/stampede/Little_House.jpg
 23320     3089 -rwxrwxrwx    1 root                         root                          1530449 Jan  9 22:57 /mnt/Tank2/Users/root/stampede/Milky_Way.jpg
 23325     3857 -rwxrwxrwx    1 root                         root                          1938544 Jan  9 22:47 /mnt/Tank2/Users/root/stampede/Shy_Horses.jpg
 23324     3857 -rwxrwxrwx    1 root                         root                          1940621 Jan  9 22:50 /mnt/Tank2/Users/root/stampede/Reinforcements.jpg
一切都很好,除非文件或文件夹名中有空格,否则一切都会失败。 如果我的文件夹名为“文件夹1”,则脚本仅获取“文件夹” 我想我所需要做的就是让“cat output_file | awk'{print$11}'”从$11扩展到行的末尾,并在每个空格之前添加一个\以便输出符合标准*nux文件格式,但我不知道如何做

任何帮助都会很好

首先,检查输出是否正常。 如果可以,请尝试下面的脚本

awk '{print $5 ":" $6,substr($0,112)}' output_file |while read perm file
do
  chown "$perm" "$file"
done

你工作太辛苦了,也让电脑工作太辛苦了。永远不要把猫和格雷普吹到awk。在这种情况下,您不需要任何这些工具;只要做:

while read inode blocks perm links owner group bytes month day time path; do 
    chown $owner:$group "$path"
done < output_file
读取索引节点时阻止perm链接所有者组字节月日时间路径;做
chown$owner:$group“$path”
完成

read将把所有尾随字段放入path,保留空白。

尝试
cut-d”“--complete-f1
而不是
awk
或者您可以使用
awk'{$11=“”;sub(/^*/,”);}1'
它输出。/Backup.sh:第43行:意外标记附近的语法错误
|'。/Backup.sh:第43行:
用于
cat输出_文件{$11=“”;sub(/^*/,“”);}1';do chown
cat输出文件| grep$f\$| awk'{print$5:“$6}”`$f;done'no error for me can show script?for f in
cat output_file | awk'{$11=“”;sub(/^*/,“”);}1';do chown
cat输出文件| grep$f\$| awk'{print$5:“$6}”`$f;请在您的问题窗口中粘贴代码,使其看起来格式正确。输出变为:chown:12 22:36/mnt/Tank2/Users/root/week 1:没有这样的文件或目录请先手动运行awk命令,您可能需要调整substr()中的数字,在我的系统中,它是78,但在您的输出文件中,它是112。您需要自己确认。在awk命令中更改110会更改空格数,但它始终在空格后显示数据。我在最后的脚本中尝试了几个不同的数字,每次看到它们时,我都会做出不同的输出。错误在$5和$6上,似乎它们不是所有者和组。(12:22:36,日期和时间??),你也能调整一下吗?是的!太棒了!我只是想用我知道的工具来做。我不需要这样做,但我试图了解您的解决方案以供将来参考。这是否可用于恢复权限?chmod$perm$path?从文件中读取变量的值;一旦定义了变量,就可以对它们执行任何操作。
while read inode blocks perm links owner group bytes month day time path; do 
    chown $owner:$group "$path"
done < output_file