Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

The OCD in me wants directories I do not like the name of to be hidden since I do not interact with them directly.

How can I hide directories without using the dot notation?

share|improve this question
    
Do I understand it right? You want folders that do not start with . to be hidden? –  txwikinger Aug 12 '10 at 13:32
    
No i would like to hide files without using the . to hide them –  myusuf3 Aug 12 '10 at 13:33
    
Yeah. That's what I actually meant. You expressed it better. –  txwikinger Aug 12 '10 at 13:52

4 Answers 4

up vote 49 down vote accepted

Assuming you only care about hiding the files from showing up in nautilus, there is a bug on the GNOME Bugzilla about this. However, currently, that bug has not been resolved.

There is another way to hide files from appearing in nautilus. If you create a file called .hidden inside of a directory, any filename listed in the file will not be displayed.

For example, below is a .hidden file that I created. This file will hide any files or folders named b or e located in the same directory as the .hidden file.

Example .hidden File

Below is a screenshot of the folder that contains the .hidden file. Note that you only see three files: a, c, and f. You do not see the .hidden file due to the '.' at the beginning of its name. Example Folder

The screenshot below is of the same folder as before. However, this time, I hit Ctrl+H to cause nautilus to display hidden files and folders. Notice how there are several additional files that show up. You now see several files that were previously hidden due to having names that began with a '.'. There are also now files called 'b' and 'e', which although not having names beginning with a '.', were hidden due to being listed in the .hidden file.

Example Folders With Hidden Files Visible

Files mentioned in the .hidden file will only be hidden in nautilus. Tools like ls will still display them. The .hidden file is also not recursive. It only affects files in the same directory as the .hidden file is in.

Some people on the forum have gone ahead and created scripts for nautilus that make it easier to add files to the .hidden file. The first script includes a nice explanation about how to install and use the scripts, but the second script is a bit cleaner and shorter. Feel free to use either script to make your life a bit easier.

share|improve this answer
4  
Wow that's nice. Hides files in Nautilus pretty well. This should be voted as the answer really. –  LFC_fan Nov 5 '10 at 23:48
    
Thanks a lot!! +1!! –  Ravi Jul 31 '12 at 13:35
    
+1. Just a note, IF you think you have to add ' for file or folder name which contains ` ` space, it is not. Simply add the file or folder name –  Anwar Shah Sep 8 '12 at 6:49

Unix and Linux only supports hiding folders that being with a ..

If you really want to get them out of the way, but want them to not have .s, put them all in a .hidden in the same directory as the file or folder you want to hide. .hidden will not be exposed by the file manager, and your files will not have a name change.

share|improve this answer
1  
i would so like to keep them in the same place :) –  myusuf3 Aug 12 '10 at 13:54
1  
this solution will keep them in their same place. .hidden doesn't even have to be in your home folder if you don't want it to be. I usually use it on removable drives that have config files I don't want to see. –  jumpnett Aug 12 '10 at 14:59
1  
@jumpnett is correct, place .hidden in the same location as the files you want to hide, and add the file/directory names in the .hidden file, one per line. Works great! –  invert Aug 31 '10 at 13:33

If you want to hide files, you are only left with renaming them with a preceding ., as is *NIX convention. Sorry, but that's it.

However, if you would like to hide the content of the files/directories, you can do so with file permissions.

So say you have a bunch of files in a folder called secret_stash, you could change it so that only you (the owner) have r-x (read, execute) and everyone else has nothing --- (no access). Since r-x is the minimum perms needed to view a directory (read to access its contents and execute to be able to see them), anything inside of that folder is effectively hidden from everyone but root.

NOTE: I'm running this demo as root, and trying to access the folder as myuser

To do this you run chmod 700 dirname (700 means rwx------):

% mkdir secret_stash
% chmod 700 secret_stash

And here it is:

% whoami
root
% ls -ld secret_stash
drwx------ 2 root root 4.0K 2010-08-12 07:59 secret_stash/
% ls secret_stash  
./  ../  secret.txt
% cat secret_stash/secret.txt 
TOP SECRET DATA

Now and if I try to access it from myuser, attempts to access the folder or its contents fail:

% whoami
myuser
% ls -ld secret_stash
drwx------ 2 root root 4.0K 2010-08-12 07:59 secret_stash/
% ls secret_stash 
ls: cannot open directory secret_stash: Permission denied
% cat secret_stash/secret.txt
cat: secret_stash/secret.txt: Permission denied

And now I've said the word "secret" so many times it's lost all meaning!!

share|improve this answer
2  
You can make it really hidden with chmod -R 000 secret_stash then no one will be able to read it! –  Marco Ceppi Aug 12 '10 at 15:41
    
@Marco Ceppi - ULTIMATE SECRECY! –  jathanism Aug 12 '10 at 18:22
    
Of course this is more "Security" than it is "Obscurity" - which is what the OP was looking for I think ;) –  Marco Ceppi Aug 12 '10 at 18:28
1  
@MarcoCeppi: chmod 000 will hide the file from even the owner of the file, except the root, which can always bypass 000. However, the owner of the file can still change the permission of the file to read it, so you need to also change the ownership of the file to root to make the 000 permission really meaningful. –  Lie Ryan Jun 26 '12 at 4:24

From the command line you could try something like this in your .bash_aliases file:

lsh() {
    [ -s .hidden ] && echo "lsh: hiding $(wc -l .hidden) patterns" && ls $@ | grep -v -F "$(cat .hidden)";
    [ ! -f .hidden ] && ls $@
}

This adds a new command lsh that behaves like ls, but hides files listed in a .hidden directory. (It also is missing some of its features like colorized output and column listings.)

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.