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?

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".


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 ...


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.


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


-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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.