Help! There's a slash '/' in my filename.

Steve Hayman sahayman at porbeagle.cs.indiana.edu
Fri Feb 8 08:22:38 AEST 1991


I've added this section to the FAQ answer about removing files with
strange characters in their names.  Please email me any corrections or
additions.  Thanks.

    If the filename has a slash in it, you have a bigger problem.
    Recall that Unix directories are simply pairs of
    filenames and inode numbers.  A directory essentially
    contains information like this:

	filename  inode

	file1	  12345
	file2.c	  12349
	file3     12347

    Theoretically, '/' and '\0' are the only two characters that
    cannot appear in a filename - '/' because it's used to separate
    directories and files, and '\0' because it terminates a filename.

    Unfortunately some implementations of NFS will blithely create
    filenames with embedded slashes in response to requests from remote
    machines.  For instance, this could happen when someone on a Mac or
    other non-Unix machine decides to create a remote NFS file on
    your Unix machine with the date in the filename.  Your Unix
    directory then has this in it:

	filename  inode

	91/02/07  12357
    
    No amount of messing around with 'find' or 'rm' as described above
    will delete this file, since those utilities and all other Unix
    programs, are forced to interpret the '/' in the normal way -
    those programs will think that "91" is a directory.

    What can you do in this case?  
    The first thing to try is to return to the Mac that created this
    crummy entry, and see if you can convince it and your local NFS
    daemon to rename the file to something without slashes.

    If that doesn't work or isn't possible, drastic action by root is
    required.   Use "ls -i" to find the inode number of this bogus
    file, then unmount the file system and use "clri" to clear the
    inode, and "fsck" the file system with your fingers crossed.
    This destroys the information in the file.  If you want to
    keep it, you'll have to patch the directory the hard way
    by crawling around in the raw file system.
    Use "fsdb", if you have it, otherwise start learning "adb".
    


..Steve



More information about the Comp.unix.internals mailing list