Đôi lúc chúng ta cần lưu kết quả sau khi thực hiện lệnh ls hoặc lệnh find vào một mảng (array) để xử lý cho một yêu cầu nhỏ nào đó. Trong bài này chúng ta sẽ tìm các file có đuôi .sql trong một thư mục, sau đó in ra tên không chứa đuôi .sql của từng tập tin. Đầu tiên chúng ta cần list ra những file có đuôi .sql với lệnh ls và lưu vào array ten la files

files=($(ls /path/to/folder))

Sau đó chúng ta tiến hành loop để in chỉ tên tập tin không co duoi .sql ( abc.sql thoi nhe, abc.xyz.sql ?? :D :P )

for i in ${files[@]}; do
    echo $i | cut -d'.' -f 1
done

Các bạn có thể mở rộng yêu cầu, chẳng hạn bạn muốn đọc từng file .sql ứng với từng table trong postgres database chẳng hạn, sau đó dùng lệnh pg_restore ví dụ nhé:

for i in $(files[@]); do
    pg_restore --data-only --verbose --disable-triggers --no-owner --dbname abc_test --table ${i#.sql} --no-privileges $1$i
done

Với $1 là param đuờng dẫn đến thư mục chứa file .sql. Sau đó các bạn có thể lưu lại thành 1 file jjdo.sh, sau đó chạy :

sh ./jjdo.sh path_to_folder

P/S: Để thay thế 1 pattern trong bash ta dùng ${var_name#shortest_matched_pattern} hoặc ${var_name#longest_matched_pattern} # tìm từ đầu - % tìm từ cuối