【发布时间】:2014-02-14 13:50:10
【问题描述】:
我一直在用头撞墙,试图让它发挥作用。
我正在编写一个用于 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
这是一个输出文件的例子
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 文件格式,但我我无法弄清楚该怎么做。
任何帮助都会很棒!
【问题讨论】:
-
试试
cut -d" " --complement -f1代替awk或者你可以使用awk '{$11=""; sub(/^ */, "");}1' -
它输出 ./Backup.sh: line 43: syntax error near unexpected token
|' ./Backup.sh: line 43:for f incat output_file|awk '{$11=""; sub(/^ */, "");}1' ; do chowncat output_file|grep $f\$|awk '{print $5 ":" $6}'` $f ;完成' -
没有错误可以显示脚本?
-
for f in
cat output_file|awk '{$11=""; sub(/^ */, "");}1' ; do chowncat output_file|grep $f\$|awk '{print $5 ":" $6}'` $f ;完成 -
请将代码粘贴到您的问题窗口中,使其格式正确。
标签: bash awk rsync freebsd chown