Bagaimana cara menghapus semua file dari direktori?

Yang paling dekat yang saya dapatkan adalah

# rm /path/to/directory/*.*

tapi itu tidak berfungsi untuk file yang tidak memiliki ekstensi...

Linux tidak menggunakan ekstensi. Terserah pembuat file untuk memutuskan apakah nama tersebut harus memiliki ekstensi. Linux melihat beberapa byte pertama untuk mencari tahu jenis file apa yang sedang ditangani.

  • Untuk menghapus semua berkas yang tidak tersembunyi* dalam Penggunaan Direktori:

    rm /path/to/directory/*

    Namun, ini akan menunjukkan kesalahan untuk setiap sub-direktori, karena dalam mode ini hanya diperbolehkan untuk menghapus file.

  • Untuk menghapus semua file non-tersembunyi dan sub-direktori (bersama dengan semua isinya) dalam Penggunaan Direktori:

    rm -r /path/to/directory/*

* File dan direktori tersembunyi adalah mereka yang namanya dimulai dengan . (dot) karakter, misalnya.: .hidden-file atau .hidden-directory/. Perhatikan bahwa, di Bash, jika dotglob opsi (yang tidak aktif secara default) diatur, rm akan bertindak pada file tersembunyi juga, karena mereka akan dimasukkan ketika * diperluas oleh shell untuk menyediakan daftar argumen nama file.

  • Untuk menghapus folder dengan semua isinya (termasuk semua folder interior):

    rm -rf /path/to/directory
  • Untuk menghapus semua isi folder (termasuk semua folder interior) tetapi bukan folder itu sendiri:

    rm -rf /path/to/directory/*

    atau, jika Anda ingin memastikan bahwa file/direktori tersembunyi juga dihapus:

    rm -rf /path/to/directory/{*,.*}
  • Untuk menghapus semua & quot;File & quot; dari dalam folder(tidak menghapus folder interior):

    rm -f /path/to/directory/{*,.*}

Peringatan: jika Anda memiliki spasi di jalur Anda, pastikan untuk selalu menggunakan tanda kutip.

rm -rf /path/to the/directory/*

setara dengan 2 terpisah rm -rf panggilan:

rm -rf /path/torm -rf the/directory/*

Untuk menghindari masalah ini, Anda dapat menggunakan 'kutipan tunggal'(mencegah semua ekspansi, bahkan variabel shell) atau "kutipan ganda"(memungkinkan perluasan variabel shell, tetapi mencegah ekspansi lainnya):

rm -rf "/path/to the/directory/"*

Dimana:

  • rm - Singkatan Hapus
  • -f - Singkatan Angkatan yang sangat membantu ketika Anda tidak ingin ditanya/diminta jika Anda ingin menghapus arsip, misalnya.
  • -r - Singkatan rekursif yang berarti Anda ingin pergi secara rekursif ke setiap folder dan menghapus semuanya.

Untuk menghapus semua file dalam direktori (termasuk file tersembunyi dan subdirektori) jalankan:

rm -rf /path/to/directory/{*,.*}

Untuk menghapus semua file dan direktori (termasuk tersembunyi ones) dalam direktori, Anda dapat mencoba yang berikut ini:

  • hapus folder, lalu buat ulang

    rm -rf dir_name && mkdir dir_name
  • gunakan find

    find dir_name -mindepth 1 -delete  

Di sini kita tentukan -mindepth 1 untuk mengecualikan direktori dir_name itu sendiri.
Lihatlah tautan berikut:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory

Jika Anda ingin menghapus hanya file di/path/to / direktori yang dapat Anda lakukan

find /path/to/directory -type f -print0| xargs -0 rm 

atau

find /path/to/directory -type f -exec rm '{}' \;

Anda dapat melakukan banyak hal dengan find, keuntungannya adalah Anda dapat membuat daftar apa yang ditemukan tanpa menyalurkannya rm jadi Anda dapat melihat apa yang akan dihapus sebelum Anda mulai.

Jika Anda juga ingin menghapus semua subdirektori dan direktori itu sendiri, Anda dapat menggunakan rm -rf /path/to/directory. Tapi selalu periksa baris Anda sebelum menekan kembali, rm -rf dapat menyebabkan banyak havock juga, misalnya jika Anda secara tidak sengaja memasukkan spasi setelah garis miring pertama saat memiliki izin pengguna super...

Karena pertanyaan ini terus-menerus di bagian atas Google ketika saya mencari ini sendiri:

Jawaban lainnya menderita masalah yang berbeda:

  1. Beberapa dari mereka termasuk . dan .. yang berisik, membingungkan, dan menjengkelkan.

  2. Beberapa dari mereka lupa file tersembunyi (file yang dimulai dengan titik).

  3. Mereka tidak menghapus dalam urutan yang benar (terdalam-pertama) untuk memungkinkan penghapusan direktori.

  4. Mereka turun ke sistem file lain (terpasang), yang seringkali tidak diinginkan.

  5. Mereka sulit untuk diperluas dengan benar dengan parameter tambahan (lebih lanjut tentang itu di bawah).

Jadi, untuk menghapus semua file dan folder secara rekursif dalam direktori, lakukan ini:

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

Perhatikan bahwa saya menambahkan -xdev argumen untuk mencegah turun ke gunung (seperti /proc dll.).

Mengapa tidak -depth atau -delete?

Meskipun orang-orang terus-menerus meremehkan saya untuk ini, metode-metode itu memiliki kelemahan: sepertinya tidak cukup dapat diperluas untuk memungkinkan -pruneing subdirektori (tanpa memperkenalkan lebih banyak masalah). Berbeda dengan metode ini, Anda bisa memasukkan

-not \( -path "${DIR}/subdir" -prune \)

sebelum -mindepth argumen untuk mengecualikan subdir dari memiliki isinya dihapus.

Anda dapat cd ke direktori dan kemudian jalankan perintah rm *.* sama seperti di DOS jika Anda ingat.

Untuk menghapus direktori saat ini, Anda bisa misalnya menggunakan rm -d ./*

- d memberitahu untuk menghapus direktori juga.

Lihat jawabannya di sini, ini dapat menghapus file tersembunyi juga tanpa peringatan dan menghapus direktori itu sendiri ubuntu - Delete contents but not directory in Linux? - Stack Overflow

Saya tidak memiliki reputasi yang cukup untuk menambahkan jawaban nyata, tetapi ketika menggunakan solusi shopt-s dotglob && rm /path/to/directory/* di bash, (shopt-s dotglob && rm /path/to/directory/*) (dengan tanda kurung) akan mencegah shopt-s dotglob bocor di luar perintah yang satu ini. (Kurung menjalankan perintah yang terkandung dalam subkulit.)