Saya mencoba mencari file terbesar di direktori secara rekursif. Jika ada subdirektori di dalam direktori tersebut, fungsi tersebut perlu masuk ke dalam direktori itu dan memeriksa untuk melihat apakah file terbesar ada di sana. Setelah file terbesar ditemukan, output ditampilkan dengan nama jalur relatif dan nama serta ukuran file terbesar.
EX:
dude@shell2 (~...assignment/solutions) % bash maxfile.sh ~/test
class/asn
dude.h.gch: 9481628
Inilah yang saya miliki:
#!/bin/sh
clear
recursiveS() {
for d in *; do
if [ -d $d ]; then
(cd $d; echo $(pwd)/$line; du -a; recursiveS;)
fi
done
}
recursiveS
Saya telah terjebak untuk sementara waktu sekarang. Saya tidak bisa menerapkan ini dengan pipelining sejumlah alat Unix yang ada. Ada ide yang bagus!
bash
shell-script
recursive
pengguna2419571
sumber
sumber
for d in */ .[^.]*/
; lakukan ... `Jawaban:
gunakan
find
(di sini asumsi GNUfind
) untuk menampilkan nama file dengan ukuran file. menyortir. cetak yang terbesar.Itu mengasumsikan jalur file tidak mengandung karakter baris baru.
Menggunakan perulangan
bash
dengan implementasi GNU daristat
:Ini akan jauh lebih lambat daripada solusi menemukan. Itu juga mengasumsikan bahwa nama file tidak berakhir pada karakter baris baru dan akan melewati file tersembunyi dan tidak turun ke direktori tersembunyi.
Jika ada file yang dipanggil
-
di direktori saat ini, ukuran file yang terbuka di stdin akan dipertimbangkan.Waspadalah bahwa versi
bash
sebelum 4.3 mengikuti tautan simbolis ketika menuruni pohon direktori.sumber
tail -n 1 <(sort -n <(find . -type f -printf "%s\t%p\n"))
)Perintah ini juga membantu mencantumkan ukuran yang ditentukan.
sumber
Ini berfungsi pada BSD / macOS:
Anda juga dapat menambahkan
| head -n 3
untuk menampilkan angka entri yang menarik (3 dalam hal ini).sumber
man find
danman sort
, gunakan brainz :-)Dengan
zsh
, untuk file biasa terbesar:(tentu saja Anda dapat mengganti
ls -ld --
dengan perintah apa pun. Jika menggunakan GNUls
atau yang kompatibel lihat juga-h
opsi untuk ukuran yang dapat dibaca manusia ).
: hanya file biasa (bukan direktori, symlink, perangkat, fifos ...)D
: termasuk yang tersembunyi dan turun ke dirs tersembunyiOL
: dipesan kembali berdasarkan ukuran (L
ength).[1]
: hanya pertandingan pertama.Jika ada ikatan, Anda akan mendapatkan salah satu dari mereka secara acak. Jika Anda ingin yang pertama dalam urutan abjad, tambahkan ekstra
on
(o
rder berdasarkan naman
) untuk mengurutkan ikatan menurut abjad.Perhatikan bahwa itu mempertimbangkan ukuran file, bukan penggunaan disk.
sumber
[1]
dengan[1,10]