Empezar de nuevo. Lea esta respuesta completa al menos una vez antes de comenzar y asegúrese de entenderla. Si es necesario, cópielo en un editor y corrija las supuestas referencias a /dev/sdaX
y /dev/sdbX
. En realidad. Desea hacerlo bien porque tiene una oportunidad muy fácil de romper su instalación existente por completo y por completo. En realidad.
Particionar el SSD.
/dev/sda5
Linux. Copie la partición de Linux que desea conservar
/dev/sdb2
, ejecutecat /dev/sda5 >/dev/sdb2
dd
. Usar cat
no es más lento y suele ser mucho más rápido Cambiar el tamaño del sistema de archivos de destino para que se ajuste a la partición
/dev/sdb2
y su tipo de sistema de archivos es ext3
o ext4
, ejecuteresize2fs /dev/sdb2
Todavía usando el disco de rescate
/dev/sdb2
, ejecutechroot /dev/sdb2 /bin/bash
Ejecute los siguientes comandos, pero tenga en cuenta que sus comandos pueden variar según la distribución
grub-install /dev/sdb # Second disk
update-grub
Reinicie y asegúrese de que el nuevo sistema pueda iniciarse
Arregle la partición de intercambio si tiene una
/dev/sdb3
, ejecutemkswap /dev/sdb3
/etc/fstab
para actualizar (o comentar )la definición de UUID de intercambio Retire su disco antiguo y reinicie
hd0()
en lugar de hd1()
. Si es así... Ejecute los siguientes comandos, o sus equivalentes,una vez más
grub-install /dev/sda # First disk, this time
update-grub
Reiniciar una vez más
Prueba:
#!/usr/bin/env bash
for f; do
mv "$f" ~/trashcan
done
$
'sigil es obligatorio para llamar una variable declarada($f
)for f in "$@"
aquí En su código, ha olvidado el $
delante de f
en el cuerpo del ciclo. Esto también debe citarse correctamente como "$f"
para admitir nombres de archivo con espacios, etc. No estoy seguro de que esta sea la causa de su mensaje de error (y no veo nada en el código que pueda causar que aparezca ese error ). El error que esperaría es No such file or directory
al intentar mover un f
inexistente.
Para una pequeña utilidad como esta, podría convertirla en una función de shell en su archivo ~/.bashrc
:
trash () {
local trashcan="$HOME/trashcan"
mkdir -p "$trashcan"
mv -f -v "$@" "$trashcan"
}
Esta función se asegura de que la carpeta de basura realmente exista antes de mover cosas a ella. También realizará el movimiento detalladamente, mostrando los nombres de las cosas que se mueven.
No hay necesidad de iterar aquí ya que "$@"
se expandirá correctamente a los nombres dados a la función en la línea de comando.
La única razón que puedo ver para querer iterar sobre los nombres es si quieres asegurarte de que el objetivo del mv
no existe antes de realizar el movimiento (para que las cosas en la papelera no funcionen. no se sobrescribe con elementos nuevos ). Con mv
de GNU coreutils, puede hacerlo automáticamente con algo como
mv -f -v --backup=numbered "$@" "$trashcan"
Con no -GNU mv
, es posible que desee ese bucle (que reemplaza el mv
en la función de shell anterior):
local trash_ext="$RANDOM"
for name; do
while [ -e "$trashcan/${name##*/}.$trash_ext" ]; do
trash_ext="$RANDOM"
done
mv -f -v "$name" "$trashcan/${name##*/}.$trash_ext"
done
Esta es solo una forma rápida -y -sucia de crear un nombre único agregando un número aleatorio después del nombre del archivo. La cosa ${name##*/}
se expandirá al nombre base (, la parte del nombre de archivo de la ruta )de $name
y podría ser reemplazada por $( basename "$name" )
.