Saya perlu skrip saya untuk melakukan sesuatu pada setiap file di direktori saat ini tidak termasuk sub-direktori.
Misalnya, di jalur saat ini, ada 5 file, tetapi 1 di antaranya adalah folder (sub-direktori). Skrip saya harus mengaktifkan perintah yang diberikan sebagai argumen saat menjalankan skrip tersebut. Yaitu "bash script wc -w" harus memberikan jumlah kata setiap file dalam direktori saat ini, tetapi tidak ada folder, sehingga output tidak pernah memiliki baris "/ sub / dir: Is a directory".
Skrip saya saat ini:
#!/bin/bash
dir=`pwd`
for file in $dir/*
do
$* $file
done
Saya hanya perlu mengecualikan direktori untuk loop, tapi saya tidak tahu caranya.
if [ -f "$file" ]; then ...
. Bukan direktori yang akan mengembalikan tidak hanya file biasa tetapi juga soket dan symlink.! -d
.Inilah alternatif untuk menggunakan loop for jika apa yang perlu Anda lakukan adalah sederhana (dan tidak melibatkan variabel pengaturan di shell & c utama).
Anda dapat menggunakan
find
dengan-exec
dan menggunakan-maxdepth 1
untuk menghindari recursing ke subdirektori.Itu
[ -n "$1" ]
ada untuk menghindari mengeksekusi semua file dalam direktori ketika skrip tidak memberikan argumen.sumber
Di zsh, Anda dapat menggunakan kualifikasi glob untuk membatasi kecocokan wildcard berdasarkan jenis file. Misalnya, menambahkan
(.)
setelah pola membatasi ke file biasa.Untuk mengatasi nama file yang dimulai dengan
-
atau.
, gunakanwc -c -- *(.N)
atauwc -c ./*(.N)
. Jika Anda ingin menyertakan tautan simbolik ke file biasa juga, buatlah itu*(-.)
.Kerang umum lainnya tidak memiliki fitur seperti itu, jadi Anda perlu menggunakan beberapa mekanisme berbeda untuk memfilter menurut file seperti menguji tipe file dalam satu lingkaran atau
find
.sumber
Bash untuk loop tidak termasuk sub-direktori ('/') dan tautan (@):
sumber