если Вы хотите скопировать корневую файловую систему и беспокойство о специальных файлах и устройствах, лучший способ:
позволяет говорят, что Вы смонтировали внешний диск под/mnt/external
mkdir /mnt/root
mount / /mnt/root -o bind
cp -a /mnt/root/* /mnt/external/
или
rsync -aP /mnt/root/ /mnt/external/
или (если Вам нравится tar так, btw худшая опция),
tar -C /mnt/root -cf - ./ | tar -C /mnt/external -xpf -
добавьте-v к любому вышеупомянутому для подробного вывода, но это замедлит немного процесс
Я не знаю ни о какой стандартной команде с этой целью, но достаточно легко разработать одно собственное в небольшом сценарии оболочки. Создайте следующее, сделайте это исполняемым файлом и добавьте его местоположение к своему ПУТИ.
Редактирование - обновленный, чтобы обработать многострочный стандартный вход и обработать пробелы во входе.
printOrWhatnot:
#!/bin/bash
# printOrWhatnot script, to re-pipe stdin, while echoing something else via stderr
# read stdin (possibly multi-lined) into $my_array[]:
while read -t 1 piped
do
my_array=("${my_array[@]}" "$piped")
done
# echo the supplied arguments by sending them to stderr:
echo "$@" 1>&2
# now spew $my_array[], line by line, to any further processing:
arrayLen=${#my_array[@]}
for (( i=0; i<$arrayLen; i++ ));
do
echo ${my_array[$i]}
done
Теперь это должно работать, как Вы предположили:
myhost> echo dog | printOrWhatnot "PUTTING MY THING DOWN" | sed 's/dog/cat/g' | printOrWhatnot "FLIP IT"|rev
PUTTING MY THING DOWN
FLIP IT
tac
Необходимо отправить сообщение в другой дескриптор файла, чем stdout и просто вывести stdin к нетронутому stdout:
printOrWhatnot() { echo "$@" >&2; cat -; }
Если Вам нужны Ваши сообщения, чтобы (в конечном счете) появиться на stdout, изменении rev
кому: rev 2>&1
или перенесите свой конвейер в фигурные скобки:
{
echo dog |
printOrWhatnot "PUTTING MY THING DOWN" |
sed 's/dog/cat/g' |
printOrWhatnot "FLIP IT" |
rev
} 2>&1
csh
или tcsh
например), и что stdin не пуст. Но это приятно компактно.
– Lars Rohrbach
31.10.2012, 03:11