Mover archivos y carpetas accidentalmente a lugares inexistentes
Pregunta
A menudo hago el comando como:
mv folder $something_that_does_not_exist
mv files* $something_that_does_not_exist
Entonces, me doy cuenta de que mis archivos se han ido. No puedo verlos incluso en la carpeta " $ something_that_does_not_exist " ;. ¿Dónde se han ido mis archivos y carpetas? ¿Cómo puedo recuperarlos?
Solución
Para evitar este problema, tengo la costumbre de agregar siempre un / al final de los nombres de directorio cuando utilizo cp
o mv
:
$ touch foo
$ mv foo bar/
mv: cannot move `foo' to `bar/foo': No such file or directory
Sin la barra diagonal final, mv
realiza una operación de cambio de nombre de archivo. Es posible que sus archivos hayan cambiado de nombre.
Otros consejos
Si $ something_that_does_not_exist
se expande a nada (pero no estoy seguro si ese es su problema?) entonces el primer mv fallará. El segundo comando mv también fallará a menos que " archivos * "
se expanda exactamente a dos archivos o si el último nombre de archivo " archivos * "
se expande a ser un directorio Luego, los archivos se moverán a ese directorio.
Si el comando está en un script y desea que su script se cancele al intentar expandir la variable y no está configurado, puede usar el modificador de signo de interrogación. Ejemplo:
$ echo ${DISPLAY?}; echo display
:0.0
display
$ echo ${MYTEST?}; echo mytest
bash: MYTEST: parameter null or not set
$
Entonces, si usas
mv folder ${something_that_does_not_exist?}
y something_that_do___exist
no está configurado, los siguientes comandos no se ejecutarán.
No podrá recuperar sus archivos, ya que el shell expandirá sus archivos y creo que el último archivo de la lista ahora se llamará $ something_that_does_not_exist.
Todos los demás archivos de la lista se habrán sobrescrito. Entonces no puedes recuperarlos.
EDITAR: En mi máquina virtual de smoothwall (¡el único GNU / Linux en mis dedos ahora mismo!) obtengo esto:
$ mkdir t1
$ mv t1 t2
$ ls
t2/
$ mv t2 t1
$ cd t1
$ touch f1 f2 f3 f4
$ mv f* ../t2
mv: target `../t2' is not a directory
mv folder $something_that_does_not_exist
Esto debería ser un error:
$ mkdir folder
$ mv folder
mv: Insufficient arguments (1)
Usage: mv [-f] [-i] f1 f2
mv [-f] [-i] f1 ... fn d1
mv [-f] [-i] d1 d2
El otro caso depende de qué archivos *
coinciden:
mv files* $something_that_does_not_exist
Si la coincidencia final es un directorio, es probable que encuentre sus archivos allí. De lo contrario, habrá cambiado el nombre del primer archivo para que sea el mismo que el segundo o ha tenido otro error como el anterior.
1) Intenta mover el directorio " carpeta " ;:
mv folder abcde
Si " abcde " es un directorio existente, se moverá " carpeta " en "abcde". Si " abcde " es un archivo existente, el comando fallará. De lo contrario, cambiará el nombre de " carpeta " a "abcde".
2) Intenta mover algunos archivos:
mv files* abcde
Si " abcde " es un directorio existente, moverá los " archivos * " en "abcde". De lo contrario, si solo hay un archivo que coincida con "archivos *", cambiará el nombre de ese archivo a "abcde". De lo contrario, el comando fallará.