Что случилось с этим резервным сценарием?

Рабочая человечность 16.04

Обновление: Я закончил сообщения об ошибках двойным заключением в кавычки переменных:

cp -ru "$line" "$destname"

Но это ничего все еще не копирует. После добавления echo $? после строки выше, я добираюсь 0.

Замена cp с ls -l содержание списков каталогов.

Код:

[ $# -eq 0 ] && { echo "Usage: $0 m/d/yyyy"; exit 1; }

DestDir=/media/WD_NAS_LEW/grsync

find Documents -type f -newermt $1 > mybackup.log
awk 'BEGIN{FS=OFS="/"}{NF--; print}' mybackup.log | while read line 
do
destname=$DestDir/$line
cp -ru $line $destname
done

#rm mybackup.log
echo Done

Вывод сценария - и файлы не копируется для строк без ошибок ниже:

$ ./mybackup.sh 8/20/2018
cp: target 'Card/Documents' is not a directory
cp: target 'Lessons' is not a directory
cp: target 'Lessons' is not a directory
cp: target 'Letters' is not a directory
cp: target 'Asia' is not a directory
cp: target 'Procedures' is not a directory
Done

Исходные данные: содержание mybackup.log (полный путь с именем файла):

Documents/Phone/Phone Main Memory Card/Documents/misc.doc
Documents/Lew/PFinc/Bills N Balances.ods
Documents/Lew/Trading/Market Review.odt
Documents/Lew/Trading/Trade Tools.ods
Documents/Lew/Trading/Studies & Lessons/Summary Technical Analysis.odt
Documents/Lew/Trading/Studies & Lessons/Paper calendars and diagonals.odt
Documents/Lew/Trading/Paper Trades.ods
Documents/Lew/Trading/DVL/thinkscript/Mark_Volume_SpikeSTUDY.ts
Documents/Lew/General/Essays & Letters/0 RFR.odt
Documents/Lew/General/Long Fist et al Asia/Long Tai Chi.odt
Documents/Lew/General/Technology/Backup Procedures/find files since X for manual backup.png
Documents/Kids/Carey/Carey August 2018.odt
Documents/Kids/Renee/birth certif and social Stella.pdf
Documents/Kids/Renee/Noah/Noah Confucius tenets.odt

вывод awk (исходный dir только, никакое запаздывание "/"; конечным диском является Western Digital mybook NAS):

/media/WD_NAS_LEW/grsync/Documents/Phone/Phone Main Memory Card/Documents
/media/WD_NAS_LEW/grsync/Documents/Lew/PFinc
/media/WD_NAS_LEW/grsync/Documents/Lew/Trading
/media/WD_NAS_LEW/grsync/Documents/Lew/Trading
/media/WD_NAS_LEW/grsync/Documents/Lew/Trading/Studies & Lessons
/media/WD_NAS_LEW/grsync/Documents/Lew/Trading/Studies & Lessons
/media/WD_NAS_LEW/grsync/Documents/Lew/Trading
/media/WD_NAS_LEW/grsync/Documents/Lew/Trading/DVL/thinkscript
/media/WD_NAS_LEW/grsync/Documents/Lew/General/Essays & Letters
/media/WD_NAS_LEW/grsync/Documents/Lew/General/Long Fist et al Asia
/media/WD_NAS_LEW/grsync/Documents/Lew/General/Technology/Backup Procedures
/media/WD_NAS_LEW/grsync/Documents/Kids/Carey
/media/WD_NAS_LEW/grsync/Documents/Kids/Renee
/media/WD_NAS_LEW/grsync/Documents/Kids/Renee/Noah

Это, кажется, изменяет разделитель полей. Я должен вынуть пробелы на имена dir или там способ оставить их?

1
задан 26 August 2018 в 10:04

1 ответ

Если у Вас есть имя файла с пространством в нем, большинство команд интерпретирует его как два имен файлов. Например, если у Вас есть файл, названный "мой файл", и Вы пытаетесь скопировать его в/tmp следующим образом:

cp my file /tmp

команда CP будет искать два файла (Названный my и file - если они не будут существовать, то это перестанет работать).

Для преодоления этого поместите кавычки вокруг имени файла:

cp "my file" /tmp

необходимо сделать то же в сценарии

cp -ru "$line" "$destname"

(удар все еще развернет имена переменной в двойных кавычках, но не одинарные кавычки),

У меня нет кобылы, проверил Ваш сценарий - могут быть другие места, где необходимо заключить имена переменной в кавычки.

btw - существует много комментариев об использовании rsync. После того как Вы привыкаете к нему, это - намного более хороший способ создать резервную копию!

1
ответ дан 7 December 2019 в 15:14

Другие вопросы по тегам:

Похожие вопросы: