|
|
|
|
|
|
|
|
How do I "undelete" a file?
|
|
If of all words of tongue and pen, the saddest are, `It might have been,'
More sad are these we daily see: `It is, but hadn't ought to be.'
- Francis Brett Hart
Someday, you are going to accidentally type something like
"rm * .foo," (a space in between '*' and '.foo') and
suddenly realize that you just deleted "*" instead of "*.foo".
Consider it a rite of passage.
Of course, any decent systems administrator should be doing
regular backups. Check with your sysadmin to see if a recent
backup copy of your file is available. But if it isn't, read
on.
For all intents and purposes, when you delete a file with "rm" -- it
is gone. Once you "rm" a file, the system totally forgets which
blocks scattered around the disk were part of your file. Even
worse, the blocks from the file you just deleted are going to be
the first ones taken and scribbled upon when the system needs
more disk space. However, never say never.
It is theoretically
possible *if* you shut down the system immediately (don't even think about it!)
after the "rm" to recover portions of the data. However, even in such
case, you'd better have a
very wizardly guru at hand with hours or days to spare to
get it all back.
Your first reaction when you "rm" a file by mistake is why not
make a shell alias or procedure which changes "rm" to move files
into a trash bin rather than delete them? That way you can
recover them if you make a mistake, and periodically clean out
your trash bin.
However, two major points: First, this is generally accepted
as a *bad* idea. You will become dependent upon this behavior
of "rm", and you will find yourself someday on a normal system
where "rm" is really "rm", and you will get yourself in a ton of
troubles.
Second, you will eventually find that the hassle of dealing with
the disk space and time involved in maintaining the trash bin, it
might be easier just to be a bit more careful with "rm". For
starters, you should look up the "-i" option to "rm" in the
man page.
If you are still undaunted, then here is a possible simple
answer. You can create yourself a "can" command which moves
files into a trashcan directory.
In tcsh or csh shell, you can place the
following commands in the ".login" file in your home directory:
-
alias can 'mv \!* ~/.trashcan'
(junk file(s) to trashcan)
alias mtcan 'rm -f ~/.trashcan/*'
(irretrievably empty trash)
if ( ! -d ~/.trashcan ) mkdir ~/.trashcan
(ensure trashcan exists)
You might also want to put
-
rm -f ~/.trashcan/*
in the ".logout" file in your home directory to automatically
empty the trash when you log out.
Same manner, in bash or sh or ksh shell, you can place the
following commands in the ".bash_profile" or ".profile" file in your home directory:
-
alias can='mv \!* ~/.trashcan'
(junk file(s) to trashcan)
alias mtcan='rm -f ~/.trashcan/*'
(irretrievably empty trash)
if [ ! -d ~/.trashcan ]; then mkdir ~/.trashcan; fi
(ensure trashcan exists)
You might also want to put
-
rm -f ~/.trashcan/*
in the ".bash_logout" file in your home directory to automatically
empty the trash when you log out.
|
|
|