bash - hapus semua direktori (dan konten) tetapi bukan file dalam pwd

19

Saya ingin menghapus semua direktori dari pwd tetapi membiarkan file-file itu sendiri di pwd. Jika konten pwd saya adalah:

mydir1
mydir2
myfile1
myfile2

maka saya ingin dibiarkan saja

myfile1
myfile2

Saya berasumsi bahwa saya perlu menggunakan rm -r -i

Apakah saya benar?

atomh33ls
sumber

Jawaban:

10

Tidak ada yang akan memberi Anda "operan yang hilang" karena Anda tidak menentukan apa pun. Puting *akan meminta juga untuk file.

Saya akan mencoba:

find -mindepth 1 -maxdepth 1 -type d -exec rm -r {} \;

The mindepth 1akan mengecualikan .dari hasil, maxdepth 1akan mengecualikan coba lakukan di bawah direktori yang akan tetap bisa dihapus (sehingga menciptakan peringatan). Namun dalam praktiknya Anda bisa mengabaikan keduanya jika Anda setuju untuk memiliki beberapa peringatan "tidak bersalah".

fede.evol
sumber
21

Saya menemukan ini di suatu tempat:

rm -r */

Tampaknya cara termudah untuk pergi. Dengan contoh Anda, Anda harus mengonfirmasi setiap kasus, jika Anda memiliki 5 file tidak apa-apa, tetapi dengan struktur file yang lebih besar mode interaktif bukan cara untuk pergi ... Sama seperti saran, jika itu informasi penting, buat sebuah cadangan ...

Martin
sumber
1
Itu juga akan mengikuti tautan simbolik, yang sangat mungkin tidak diinginkan di sini.
JdeBP
8

Menggunakan

rm -rf ./*/

Itu menghindari mode interaktif dan hanya menghapus direktori di direktori lokal Anda.

Kami melihat
sumber
Seperti yang JdeBP tunjukkan pada jawaban Martin yang sangat mirip , jika direktori saat ini (tingkat atas) berisi tautan simbolis ke direktori lain, mereka juga akan dihapus (bahkan jika mereka tidak berada atau berada di bawah direktori saat ini).
Scott
3

Sesuatu seperti ini seharusnya bekerja:

find /path -type d -exec rm -rf '{}' \;

-type d hanya mencari direktori

Matthew Williams
sumber
-1
you can also try in this way to delete only all folders not files from any location in linux.

    #delete only all dir and don't touch files
    #!/bin/bash
    for dir in `ls -l | grep ^d | awk '{print $9}'`
    do
    echo "going to delete $dir " `rm -rf $dir`
    done
    ls
linux.cnf
sumber