Я не уверен, отвечает ли это на Ваш вопрос, но pwdx
мог дать Вам текущий рабочий каталог любого процесса.
Как это:
pwdx <PID>
Вы могли также сделать то, что Ulrich Schwarz сказал и выполнил
ls -l /proc/PID/cwd
Я записал немного сценария для этого
#!/bin/bash
echo "copying from $1"
find $1 -type f -print0 | while read -d $'\0' -r file ; do
echo Processing "$file"
target="$2""$file"
if (test -f "$target") then
echo File Exists: "$target"
else
echo copying to "$target"
targetDir=`dirname "$target"`
if (! [ -d "$targetDir" ]) then
mkdir "$targetDir"
fi
ddrescue -e0 -r0 -v -n "$file" "$target"
if ([ $? -ne 0 ]) then
echo Copy failed, deleting "$target"
rm -f "$target"
fi
fi
done
Если Вы имеете достаточно комнаты на своем внешнем диске, выполняете полную копию раздела, перескакивая через неисправимые секторы. Затем сделайте копию копии и вызов fsck
на этом.
Для копии раздела от сбойного диска использовать myrescue
, или если это не достаточно гибко ddrescue
или dd_rescue
. Все эти инструменты перескакивают через нечитабельные регионы или попытку неоднократно читать их; корректируйтесь в зависимости от того, имеют ли повторные чтения шанс работы (например, оптические среды или дискеты), или на обратном изнашивают сбойный диск раньше (например, большинство отказов жесткого диска). См. также сохраняющие данные от сбойного диска, Как восстановить данные из плохой SD-карты?
sudo myrescue /dev/sda42 >/media/backup/home.raw
cp /media/backup/home.raw /media/backup/home.recovering
/sbin/fsck -f /media/backup/home.recovering
sudo mount -o loop /media/backup/home.recovering /mnt
cp -a /mnt /media/backup/home.saved
Другое решение:
find /home/user -type f -print0 | xargs -0 -JXXX -n1 rsync --relative -lptgoHv XXX /external-disk
find
генерирует список файлов и xargs
вызовы rsync
с ними по одному. - родственник удостоверяется, что Вы получаете дерево на внешнем диске вместо плоского каталога, не бросайте тот аргумент rsync
.
xargs
заменять XXX в списке аргумента передало rsync
с именем файла из списка find
обеспечивает. Без-J xargs
поместил бы имя файла в конце списка аргумента.
– Kyle Jones
23.01.2012, 17:11
-IXXX
вместо -JXXX
; это должно работать с тем же путем.
– Kyle Jones
27.01.2012, 02:44
использовать cpio -ivd -H tar
команда
в странице справочника говорится это
Это получит файлы, заархивированные в файле directory.cpio, и разместит их в существующий каталог. '-i' опция извлекает архив, и '-v' показывает имена файлов, поскольку они извлечены. Если Вы имеете дело с заархивированным деревом каталогов, необходимо использовать '-d' опция создать каталоги по мере необходимости,
- H для формата
Во-первых, использовать rsync -aHv
--- rsync -vfh
не имеет никакого смысла для того, что Вы пытаетесь сделать.
rsync имеет - существующий игнорированием флаг, который можно использовать. Выполненный rsync -aHv --ignore-existing
пока это не выходит с ошибкой ввода-вывода. Отметьте название файла, который перестал работать, и создайте пустую версию его на внешнем диске, где это было бы скопировано, если бы rsync работал. Повторно выполните команду rsync, и - игнорируют - существующий, заставит это не пытаться скопировать файл, который перестал работать. Надо надеяться, rsync скопирует все остальное, но если он останавливается снова, повторите этот процесс. Повторитесь до rsync выполнения к завершению.