Delete all files and directories in linux

Removing almost all directories and files in linux

Quick question : I want to delete all but 1 file and 1 directory from the directory I am currently in. How do I do this? The case scenario : I have a directory which has three directories a b c and three files 1.php 2.php 3.php. I want to remove directories a,b and files 1.php and 2.php ONLY! I am having a hard time trying to do this. The solution should scale up, i.e. I don’t want to have to list all the files I do want to delete, only the ones that should stay. What do I do?

to delete a folder use rm -rf folder question is a bit unclear about how the structure looks like, perhaps post the output of ls -R

This question would be better on superuser.com or askubuntu.com, as it is not about programming. (I voted for migration.) If you actually want to write a program which does this, please edit your question accordingly.

@Fredrik : Thank you. The question is how do I delete all but one directory and one file from a directory i am currently in?

@Paulo : Oops! I was debating whether I post it here or on superuser. Then got carried away by similar questions asked here and also because stackoverflow allowed me to tag the post with Linux and Ubuntu tags 🙂

3 Answers 3

shopt -s extglob echo rm -r !(3.php|c) 
$ mkdir -p x/a x/b x/c $ cd x $ touch .php $ ls -F 1.php 2.php 3.php a/ b/ c/ $ shopt -s extglob $ echo rm -r !(3.php|c) rm -r 1.php 2.php a b 

Beat me to it. Setting shopt -s extglob makes it easy. Wonder why it isn’t on by default as it is in Kornshell?

Thanks Arafinwe. How does that solution scale up when I have 20 directories and 30 files, and I want to delete all but 1 directory. Its going to be tough to mention every single dir name and file name that way, and do the rm operation. Assume that I will need to recursively delete the directories.

For deleting all but one file in a general case, it gets more complicated.

Here is a solution in bash (or other shells, I did not check on which ones it works):

function deleteAllBut() < local pattern="^($1)" for p in "$" do pattern="$pattern|($p)" done pattern=$pattern\$ for f in * do [[ $f ~= $pattern ]] || echo $f done > 

to list all local files but these two ones. (This will not delete hidden files, e.g. ones whose names start with a . .)

How does it work? It first builds a regular expression from the command line arguments (which beforehand were expanded by the shell), then iterates through all files in the current directory and echoes all ones that do not match the pattern.

Change the echo $f to rm -r $f to actually delete those files and directories.

The following is the original answer for the original question.

cd rmdir a b rm 1.php 2.php 

This assumes your directories are empty. If they are not (and you want to remove the contents, too), use

Читайте также:  Making script in linux

instead of the second line above. ( -r stands for recursive.)

Of course, you then can combine the last two lines:

or, if you want to be tricky:

Источник

How to Remove All Files and Directories Using Linux Terminal

In this remove or delete directories and files Linux tutorial guide, you will learn how to remove empty directories and non empty directories linux using the command line. And as well as how to remove/file files linux using the command line.

How to Remove All Files and Directories Using Linux Terminal

  • To Remove All Files From the Directory in Linux
    • remove a single file in linux
    • remove multiple files at once in linux
    • Remove empty directory linux
    • Remove non-empty directory Linux
    • Remove multiple directories linux

    To Remove All Files From the Directory in Linux

    If you want to remove (or delete) a file in Linux from the command line. So, you can use the rm (remove) or unlink command.

    Note that, The unlink command allows you to delete only a single file, while with rm you can delete multiple files at once.

    Remove a single file in linux

    You can use the rm and unlink command to delete single file in linux. See the uses of rm and unlink command given below:

    If the file is write-protected, you will be prompted for confirmation on your terminal or command prompt, as shown below.

    rm: remove write-protected regular empty file 'filename'?

    Note that, Otherwise, if the file is not write-protected, it will be deleted without prompting.

    Remove multiple files at once in linux

    rm filename1 filename2 filename3

    If you want to remove all .txt files in the current directory, use the following command:

    You can use the rm with the -i option to confirm each file before deleting it:

    You can use the rm with the — f option to without prompting even:

    How to Delete Directory in Linux

    If you want to remove (or delete) a direcotories in Linux from the command line. So, you can use the rmdir and rm command.

    Remove empty directory linux

    If you want to delete an empty directory in linux. So, you can use rmdir or rm -d command, as shown below:

    rm -d dirname rmdir dirname

    Remove non empty directory linux

    If you want to remove non empty directory in linux. So, you can use with the -r (recursive) option , as shown below:

    To delete non-empty directories and all the files without being prompted, use rm with the -r (recursive) and -f options:

    To delete non-empty directories and all the files without being prompted, use rm with the -r (recursive) and -f options:

    Remove multiple directories linux

    If you want to delete multiple directories at once in linux. So, you can use the rm -r command, as shown below:

    rm -r dirname1 dirname2 dirname3

    Conclusion

    In this tutorial guide, you have learned how to use the Linux rm , rmdir and unlink commands to remove or delete files and directories in linux. And as well as how to remove or delete empty and non empty directories in linux.

    Источник

    How to remove files and directories quickly via terminal (bash shell) [closed]

    Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.

    This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.

    From a terminal window: When I use the rm command it can only remove files.
    When I use the rmdir command it only removes empty folders. If I have a directory nested with files and folders within folders with files and so on, is there a way to delete all the files and folders without all the strenuous command typing? If it makes a difference, I am using the Mac Bash shell from a terminal, not Microsoft DOS or Linux.

    Just in case you wish to restore the files in future , don’t use «rm» for such cases . Use «rm-trash» : github.com/nateshmbhat/rm-trash

    4 Answers 4

    -r «recursive» -f «force» (suppress confirmation messages)

    +1 and glad you added the «Be careful!» part. definitely a «Sawzall» command that can quickly turn a good day into a bad one.. if wielded carelessly.

    @itsmatt: You know what they say. give someone a Sawzall, and suddenly every problem looks like hours of fun!

    On a Mac? Do this instead: brew install trash then trash -rf some_dir This will move the unwanted directory into your trashbin instead of just vanishing Prestige-style into the ether. (source)

    Would remove everything (folders & files) in the current directory.

    But be careful! Only execute this command if you are absolutely sure, that you are in the right directory.

    Yes, there is. The -r option tells rm to be recursive, and remove the entire file hierarchy rooted at its arguments; in other words, if given a directory, it will remove all of its contents and then perform what is effectively an rmdir .

    The other two options you should know are -i and -f . -i stands for interactive; it makes rm prompt you before deleting each and every file. -f stands for force; it goes ahead and deletes everything without asking. -i is safer, but -f is faster; only use it if you’re absolutely sure you’re deleting the right thing. You can specify these with -r or not; it’s an independent setting.

    And as usual, you can combine switches: rm -r -i is just rm -ri , and rm -r -f is rm -rf .

    Also note that what you’re learning applies to bash on every Unix OS: OS X, Linux, FreeBSD, etc. In fact, rm ‘s syntax is the same in pretty much every shell on every Unix OS. OS X, under the hood, is really a BSD Unix system.

    Источник

    In Unix, how do you remove everything in the current directory and below it?

    But how do you delete everything in the current directory as well as every subdirectory below it and the contents of all of those subdirectories?

    10 Answers 10

    Practice safe computing. Simply go up one level in the hierarchy and don’t use a wildcard expression:

    The two dashes — tell rm that is not a command-line option, even when it begins with a dash.

    Because you are specifically matching a named directory and are thus less likely to delete something that you don’t intend to delete.

    doesn’t it delete the directory itself too? You have to do mkdir afterwards. But then any hardlink referring to that directory will be a distinct directory afterwards.

    hmm. i thought he wanted to delete everything in the current directory, but not the directory itself. how do we do that?

    Will delete all files/directories below the current one.

    If you want to do the same with another directory whose name you have, you can just name that

    If you want to remove not only the sub-directories and files of it, but also the directory itself, omit -mindepth 1 . Do it without the -delete to get a list of the things that will be removed.

    I needed to delete all the files in sub-directories, but did not want to delete the sub-directories themselves. find -mindepth 2 -delete worked great!

    You need -mindepth 1 if you are specifying a directory ( find -mindepth 1 -delete ). Otherwise Johannes is right it will not delete the current working directory (when using find -delete ).

    I tried: find -mindepth 1 -delete but i got illegal option — m but it worked great when i removed the mindepth option find . -delete

    and then hit ESC-*, and bash will expand the * to an explicit list of files and directories in the current working directory.

    • I can review the list of files to delete before hitting ENTER.
    • The command history will not contain «rm -rf *» with the wildcard intact, which might then be accidentally reused in the wrong place at the wrong time. Instead, the command history will have the actual file names in there.
    • It has also become handy once or twice to answer «wait a second. which files did I just delete?». The file names are visible in the terminal scrollback buffer or the command history.

    In fact, I like this so much that I’ve made it the default behavior for TAB with this line in .bashrc:

    bind TAB:insert-completions 

    Update: The . stands for current directory, but we cannot use this. The command seems to have explicit checks for . and .. . Use the wildcard globbing instead. But this can be risky.

    A safer version IMO is to use:

    (this prompts you for confirmation before deleting every file/directory.)

    When doing things like this, I’ve found a quick ls -r . first lets you see what you are going to delete. Useful to give a quick idea that you aren’t going to delete the whole disk.

    @Yen — because if you do it in the wrong place you can get disastrous results. Using a specific name in the wrong place can only go wrong if the same subdirectory happens to exist there.

    It is correct that rm –rf . will remove everything in the current directly including any subdirectories and their content. The single dot ( . ) means the current directory. be carefull not to do rm -rf .. since the double dot ( .. ) means the previous directory.

    This being said, if you are like me and have multiple terminal windows open at the same time, you’d better be safe and use rm -ir . Lets look at the command arguments to understand why.

    First, if you look at the rm command man page ( man rm under most Unix) you notice that –r means «remove the contents of directories recursively». So, doing rm -r . alone would delete everything in the current directory and everything bellow it.

    In rm –rf . the added -f means «ignore nonexistent files, never prompt». That command deletes all the files and directories in the current directory and never prompts you to confirm you really want to do that. -f is particularly dangerous if you run the command under a privilege user since you could delete the content of any directory without getting a chance to make sure that’s really what you want.

    On the otherhand, in rm -ri . the -i that replaces the -f means «prompt before any removal». This means you’ll get a chance to say «oups! that’s not what I want» before rm goes happily delete all your files.

    In my early sysadmin days I did an rm -rf / on a system while logged with full privileges (root). The result was two days passed a restoring the system from backups. That’s why I now employ rm -ri now.

    Источник

Оцените статью
Adblock
detector