我一直在撞墙试图让它发挥作用。
我正在编写一个用于freebsd的rsync备份脚本。我在远程服务器上没有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
这是output_file的一个例子
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文件格式但是我我无法弄明白该怎么做。
任何帮助都会很棒!
答案 0 :(得分:1)
你的工作方式太难了,也让计算机也很难用。 永远不会管道cat to grep to awk。在这种情况下,您不需要任何这些工具;只是做:
while read inode blocks perm links owner group bytes month day time path; do
chown $owner:$group "$path"
done < output_file
read会将所有尾随字段放入路径,保留空格。
答案 1 :(得分:0)
awk '{print $5 ":" $6,substr($0,112)}' output_file
如果正常,请尝试以下脚本
awk '{print $5 ":" $6,substr($0,112)}' output_file |while read perm file
do
chown "$perm" "$file"
done