delete ~ directory

Tom 'Needs A Hat' Mitchell mitch48 at sbcglobal.net
Mon Apr 19 21:21:45 UTC 2004


On Tue, Apr 20, 2004 at 03:10:19AM +0900, d l wrote:
> 
> As far as i know if u use brace to qoute a char/string,
> bash will not tries to expand/subsitute it.
> 
> so in your case 
> 
> rm -rf '~'
> 
> should work

Watch out for hints that "should work".  ;-)

When in doubt make a dummy user account with no privileges and 
play with the problem.

What I would try in my dummy account is:
     cd ~
     mkdir BigJunkPile
     mv -i ./'~'  BigJunkPile
     ls -ld BigJunkPile
     ls -l  BigJunkPile   # is my bad boy dir there.
     rm -ri BigJunkPile

 or

     cd ~
     mkdir BigJunkPile
     mv -i ./'~'  BigJunkPile/TwiddleJunk
     ls -ld BigJunkPile
     ls -l  BigJunkPile   # is my bad boy dir there should be called TwiddleJunk
     rm -ri BigJunkPile

The key with file names that contain meta characters of any kind is to
find a safe place to tinker and RTFM.  In this case the bash man page
has a number of paragraphs on Tilde Expansion.  Here is one:

   "Tilde Expansion
       "If  a  word  begins  with an unquoted tilde character (‘~’), all of the
       characters preceding the first unquoted slash (or  all  characters,  if
       there  is no unquoted slash) are considered a tilde-prefix.  If none of
       the characters in the tilde-prefix are quoted, the  characters  in  the
       tilde-prefix  following the tilde are treated as a possible login name.
       If this login name is the null string, the tilde is replaced  with  the
       value  of  the shell parameter HOME.  If HOME is unset, the home direc-
       tory of the user executing the shell is  substituted  instead.   Other-
       wise,  the  tilde-prefix is replaced with the home directory associated
       with the specified login name.
       .... 
and more

BTW: both work....

    [BoxA]$ ls
    Desktop  evolution  Gorp  mail  Mail  mbox  SELinux
    [BoxA]$ mkdir '~'
    [BoxA]$ cd '~'
    [BoxA[BoxAch bark tree grass bugs
    [BoxAbark  bugs  grass  tree
    [BoxA[BoxA]$ cd ~
    [BoxA]$ ls
    ~  Desktop  evolution  Gorp  mail  Mail  mbox  SELinux
    [BoxA]$      cd ~
    [BoxA]$      mkdir BigJunkPile
    [BoxA]$      mv -i ./'~'  BigJunkPile
    [BoxA]$      ls -ld BigJunkPile
    drwxrwxr-x  3 BoxA Apr 19 14:06 BigJunkPile
    [BoxA]$      ls -l  BigJunkPile
    total 8
    drwxrwxr-x  2 BoxA Apr 19 14:05 ~
    [BoxA]$
    [BoxA]$ ls
    BigJunkPile  Desktop  evolution  Gorp  mail  Mail  mbox  SELinux
    [BoxA]$ cd '~'
    -bash: cd: ~: No such file or directory
    [BoxA]$ mkdir '~'
    [BoxA]$ cd '~'
    [BoxA]$ ls
    [BoxA]$ touch bark tree grass bugs
    [BoxA]$ cd
    [BoxA]$ mv BigJunkPile/ BigJunkPile1
    [BoxA]$ ls
    ~  BigJunkPile1  Desktop  evolution  Gorp  mail  Mail  mbox  SELinux
    [BoxA]$ cd ~
    [BoxA]$ mkdir BigJunkPile
    [BoxA]$ mv -i ./'~'  BigJunkPile/TwiddleJunk
    [BoxA]$ ls -ld BigJunkPile
    drwxrwxr-x  3 BoxA Apr 19 14:08 BigJunkPile
    [BoxA]$      ls -l  BigJunkPile
    total 8
    drwxrwxr-x  2 BoxA Apr 19 14:07 TwiddleJunk
    [BoxA]$ ls
    BigJunkPile  BigJunkPile1  Desktop  evolution  Gorp  mail  Mail  mbox  SELinux
    [BoxA]$
    [BoxA]$ rm -ri BigJunkPile
    rm: descend into directory `BigJunkPile'? y
    rm: descend into directory `BigJunkPile/TwiddleJunk'? y
    rm: remove regular empty file `BigJunkPile/TwiddleJunk/bark'? y
    rm: remove regular empty file `BigJunkPile/TwiddleJunk/tree'? y
    rm: remove regular empty file `BigJunkPile/TwiddleJunk/grass'? y
    rm: remove regular empty file `BigJunkPile/TwiddleJunk/bugs'? y
    rm: remove directory `BigJunkPile/TwiddleJunk'? y
    rm: remove directory `BigJunkPile'? y
    [BoxA]$ rm -ri BigJunkPile1/
    rm: descend into directory `BigJunkPile1/'? y
    rm: descend into directory `BigJunkPile1//~'? y
    rm: remove regular empty file `BigJunkPile1//~/bark'? y
    rm: remove regular empty file `BigJunkPile1//~/tree'? y
    rm: remove regular empty file `BigJunkPile1//~/grass'? y
    rm: remove regular empty file `BigJunkPile1//~/bugs'? y
    rm: remove directory `BigJunkPile1//~'? y
    rm: remove directory `BigJunkPile1/'? y
    [BoxA]$


-- 
	T o m  M i t c h e l l 
	/dev/null the ultimate in secure storage.





More information about the fedora-list mailing list