Bagaimana cara menghapus hanya konten direktori?

14

Saya dalam folder: /var/myfolder.

Di dalamnya ada beberapa folder lain seperti: /var/myfolder/A/ /var/myfolder/B/ `/var/myfolder/C/dll.

Di dalam masing-masing ada beberapa file dengan nama acak. Bagaimana cara menghapus semua file dari semua folder di dalamnya /var/myfolder?

Struktur (semua direktori, mis., A, B, C dll, di dalam /var/myfolder) harus tetap utuh.

Bangun
sumber

Jawaban:

17

Mencoba:

find /var/myfolder -type f -delete

Ini mendapatkan semua file biasa di bawah / var / myfolder dan menghapusnya hanya menyisakan direktori.

StarNamer
sumber
Terima kasih atas solusinya. Saya seharusnya menyebutkan bahwa saya melakukan ini di Solaris 9, jadi temuan saya tidak memiliki opsi -delete, tapi itu adalah titik awal yang baik.
IroeN
2
Saya dapat menemukan solusi berikut: find / var / myfolder -type f -exec rm -f {} \;
IroeN
2
Maaf. Saya menggunakan Debian atau Ubuntu. Solusi Anda setara sejauh yang saya tahu.
StarNamer
6
-type f! =! -type d
mikeserv
7

Dengan zsh, gunakan . kualifikasi glob untuk mencocokkan hanya file biasa:

rm -- **/*(.)

Ini menghapus semua file biasa (tidak tersembunyi) di direktori saat ini dan subdirektori secara rekursif. Tambahkan Dkualifikasi glob untuk menghapus file biasa yang tersembunyi (dan file biasa di direktori tersembunyi) juga.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Saya menggunakan bash.
IroeN
1
@ user6554: ... yang tidak ditunjukkan oleh pertanyaan Anda maupun tag yang digunakan;)
0xC0000022L
3

Anda bisa rm */*masuk/var/myfolder

Dinesh
sumber
3
find . -depth -exec rm {} + 2>/dev/null

rm tidak menghapus direktori - jadi jalankan saja di semuanya.

Untuk menyimpan symlink ke direktori:

find .  ! -type d -exec sh -c '
    for f do [ -d  "$f" ] || 
          set "$@" "$f";  shift
    done; rm  "$@"' sh  {} +

Dan saya pikir ini juga bisa berfungsi, mungkin, cara yang sedikit dioptimalkan jika ada banyak file yang mungkin perlu diuji dalam versi di atas:

find . ! \( -type l -o -type d \)  \
-exec  rm {} + -o -exec  sh -c '
       for f do [ -d "$f" ] ||
       unlink "$f";done' sh {} +
mikeserv
sumber
Perhatikan bahwa GNU findmemiliki -xtypeopsi untuk itu.
Stéphane Chazelas
@ StéphaneChazelas - ast juga. tapi saya tidak perlu -depth sama sekali, saya tidak berpikir. saya menyimpannya di atas untuk menghindari begitu banyak panggilan kesalahan - dibungkam atau tidak - tapi itu konyol di yang lain.
mikeserv
1
# This will delete all directory contents, including hidden files and
# subdirectories, without deleting the directory itself

# With GNU find:
find /path/to/directoryToEmpty -mindepth 1 -delete

# OpenBSD (and probably other BSDs)
find /path/to/directoryToEmpty -mindepth 1 -depth -exec rm -f {} \;

# To see what it deletes, in the order it will delete it:
find /path/to/directoryToEmpty -mindepth 1 -depth -print
cerpelai
sumber
0
rm var/myfolder/*/*

Akan menghapus semua yang ada di dalam sub folder tanpa menyentuh sub folder itu sendiri.

Yang pertama *adalah untuk subdirektori dari myfolderitu sendiri ( A, B, ...). Yang kedua *adalah untuk file dalam A, Bdll

JIKA ada lebih folder di dalam A, B, dll Pertama jalankan: rm /var/myfolder/*/*/*kemudian jalankan rm /var/myfolder/*/*.

Edgar Naser
sumber
0

Anda juga harus dapat melakukan cd ke bagian atas pohon direktori yang dimaksud, kemudian jalankan:

find . -type f -print0 | xargs -0 rm -rf

dan itu akan menghapus semua file sambil membiarkan pohon direktori tetap utuh. Opsi -print0 dan -0 dapat dihilangkan jika Anda yakin Anda tidak memiliki nama file atau direktori yang mengandung spasi.

Perintah find membedakan antara file (-type f) dan tautan (-type l) jadi ini akan membuat tautan tetap utuh, jika ada. Tidak diuji. Jika ragu, jalankan:

Temukan . -tipe l

dan lihat apakah ada yang muncul sebelum Anda menjalankan perintah find sebelumnya.

rjh427
sumber
Bisakah Anda jelaskan bagaimana rmbenderanya -r, -R, --recursive - remove directories and their contents recursivelycocok dengan ini?
Stephen Rauch
Karena kami tidak menjalankan rm -rf, kami menjalankan find. -type f dan kemudian piping output dari itu ke rm -rf. Jadi itu hanya menghapus file, itu tidak menyentuh direktori. Itulah yang | bit xargs tidak, itu mengambil output dari perintah di sebelah kiri dan mengirimkannya ke perintah di sebelah kanan.
rjh427
Maksud saya tepatnya. Jika Anda tidak melewati direktori apa pun, apa gunanya bendera yang hanya berfungsi di direktori?
Stephen Rauch
Karena ingatan otot, dan masih berfungsi. Anda bisa mengajukan keberatan yang sama pada opsi "force", saya akan memberikan jawaban yang sama.
rjh427
-2

Cukup gunakan perintah di bawah ini:

sudo rm -rf directory_in_which_you_have_content / *

---------------- ATAU --------------------------------- -----------------------

'*' Adalah kependekan dari semua sehingga ketika Anda akan menggunakan * yang akan menghapus semua konten. jadi gunakan perintah seperti ini atau buka direktori tempat Anda ingin menghapus semua konten dan cukup gunakan perintah di bawah ini:

sudo rm -rf *

keyur bhatt
sumber