Bagaimana ls tanpa rekursif


19

Saya mencoba ls beberapa file dengan pola dalam direktori. Saya hanya ingin memindai level pertama tidak rekursif.

Skrip saya:

for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*)
do
  echo $i;
done

Pemindaian perintah di atas secara rekursif. Bagaimana bisa membuatnya hanya memindai direktori level pertama?


printf %s\\n "$INCOMINGDIR/"*"$BUSINESSDATE"*
mikeserv

Jawaban:


39

Jangan diurails . Juga jangan gunakan ALL_CAPS_VARS

for i in "$incoming_dir"/*"$business_date"*; do

Secara interaktif, lsmemiliki -dopsi yang mencegah turun ke subdirektori:

ls -d $INCOMINGDIR/*$BUSSINESSDATE*

Terima kasih atas informasinya, saya akan mulai membuat file dengan baris baru di namanya hanya untuk mengganggu sysadmin sekarang.
Petah

Itu sebabnya sysadmin / programmer pintar menggunakan "${i}". Anda tidak pernah tahu apa yang ada di dalamnya i.
Ricky Beam

@Petah: atau seseorang dengan niat buruk dapat membuat file bernama my_file.doc[newline]another_persons_file.docdan berharap bahwa beberapa skrip dapat mencoba "rm" apa yang dilihatnya sebagai 2 nama file ... Tautan Glenn adalah harus dibaca (di mywiki.wooledge.org, semua orang harus membaca seluruh faq, dan juga halaman jebakan)
Olivier Dulac

1
keren. saya tidak tahu opsi -d!
dokaspar

Bagus! Ini juga berfungsi untuk hal-hal yang lebih sederhana. Seperti daftar semua file dot-awalan:ls -d .*
Wassadamo

8

Tidak ada alasan mengapa perintah ini harus bersifat rekursif. Tetapi jika $INCOMINGDIR/*$BUSSINESSDATE*cocok dengan direktori, maka isi direktori ini ditampilkan, bukan direktori itu sendiri. Tetapi tidak akan ada rekursi di luar level ini.

Gunakan perintah ini untuk menghindari efek itu:

ls -d "$INCOMINGDIR/"*"$BUSSINESSDATE"*

for ... inperintah dengan lsoutput berisiko.

Secara umum findtampaknya solusi yang lebih baik atau

for i in "$INCOMINGDIR/"*"$BUSSINESSDATE"*
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.