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?

Sas
sumber
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*
glenn jackman
sumber
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"*
Hauke ​​Laging
sumber