Я бился головой о стену, пытаясь заставить это работать.
Я пишу сценарий резервного копирования 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
это пример 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, но я не могу понять, как это сделать.
любая помощь будет здорово!
cut -d" " --complement -f1
вместоawk
или вы можете использоватьawk '{$11=""; sub(/^ */, "");}1'
- person Jayesh Bhoi   schedule 13.02.2014|' ./Backup.sh: line 43:
for f вcat output_file|awk '{$11=""; sub(/^ */, "");}1' ; do chown
cat output_file|grep $f\$|awk '{print $5 : $6}'` $f ; сделано' - person JJD   schedule 13.02.2014cat output_file|awk '{$11=""; sub(/^ */, "");}1' ; do chown
cat output_file|grep $f\$|awk '{print $5 : $6}'` $f ; сделано - person JJD   schedule 13.02.2014