Tar не является способом скопировать загрузочные разделы. Вы получите только свои файлы, но не дисковую структуру. Если Вы хотите клонировать диск, необходимо использовать Clonezilla. Часто диспетчер начальной загрузки находится на главной загрузочной записи, таким образом, необходимо будет скопировать его, и windows7 имеет скрытый основной раздел (приблизительно 100 МБ), которые могут быть также необходимы. Я был бы reccomend Вы, чтобы просто установить virtualbox, создать изображение диска и восстановить его в виртуальной машине с CloneZilla. Таким образом у Вас '' ll есть свой windows7 в Вашем VM.
Где вы используете:
sed -i 's C:\ /root/ g'
вы используете s
команду с пробелом, разделяющим разные части команды, что необычно, но полностью действителен. Однако, когда вы ставите перед символом-разделителем обратную косую черту, она обрабатывается не как разделитель, а как часть самого аргумента.
Проблема в том, что обратная косая черта в C: \
экранирует пробел посередине, поэтому s
никогда не находит конец замены (теперь g
) и жалуется, что команда не завершена, как вы видели.
По крайней мере, вам нужно экранировать саму обратную косую черту с помощью другой обратной косой черты:
sed -i 's C:\\ /root/ g'
Это сработает, хотя замена пробелов другим символом может быть более четкой.
Что касается использования вами xargs
и подкаталогов - xargs
здесь не требуется, и find
может это сделать, включая обработку файлов в подкаталогах, на свой собственный. Используйте:
find ../ \( -name "*.xml" -o -name "*.conf" \) -exec sed -i -e 's|C:\\|/root/|g' '{}' +
, чтобы find
запускал саму команду sed
со всеми найденными им именами файлов. Имена файлов вставляются вместо {}
, а +
означает, что find
минимизирует количество запусков команды.
-execdir
может быть лучше, чем -exec
по определенным причинам безопасности, описанным на странице руководства find
; это нестандартное расширение, но, поскольку вы, кажется, используете инструменты GNU, оно должно быть для вас, если оно вам нужно.
Это обратная косая черта. Обратная косая черта снимает следующий персонаж и заставляет его потерять особый смысл. Команда sed читает то, что вы набрали как (здесь только выражение sed, я не буду делать всю утомительную командную строку оболочки):
s
<SPACE>
C
:
Literal <SPACE>
/root/
<SPACE>
Вы сказали sed, что хотите использовать в качестве маркера для выражения, которое вы ищете, и замены. Но sed надеется увидеть нечто вроде:
s
<SPACE>
C
:
Literal \
<SPACE>
/root/
<SPACE>
Чтобы сделать обратный слеш буквальным, дополните его обратным слешем:
sed -e 's C:\\ /root '
Лично я предпочел бы избежать использования пробела. Я бы использовал что-нибудь вроде |
или ;
. Но у тебя все равно были бы проблемы с обратным слешем. Что действительно забавно, так это то, что вам нужно набрать что-то, чтобы использовать обратный слеш в качестве разделителя. :)