New FAMILUG

The PyMiers

Saturday 16 February 2013

Tạo file hàng loạt

bạn muốn tạo ra 100 file với tên bất kỳ. Làm thế nào:

100 file với tên lần lượt là 1 2 3 4... 100:
hvn@u1210: /tmp $ for i in `seq 100`;do touch $i;done;

100 file với tên là nanosecond thời điểm hiện tại:
hvn@u1210: /tmp $ for i in `seq 100`;do touch `date +%N`;done;
100 file với tên có độ dài 7 ký tự, được tạo bởi 7 ký tự đầu tiên trong mã sha1 của nanosecond thời điểm hiện tại.
hvn@u1210: /tmp $ for i in `seq 100`;do touch `date +%N | sha1sum | head -c 7`;done;

Tạo 10 file với nội dung "hello thon":

hvn@u1210: /tmp $ for i in `seq 10`; do echo "hello thon" > $i; done;
Tạo 10 bản sao của 1 file cho trước:
hvn@u1210: /tmp $ echo "con chim non tren canh cao" > basefile.txt
hvn@u1210: /tmp $ for i in `seq 10`; do cp basefile.txt `date +%N`; done

Giải thích:
- thư mục /tmp được hệ thống set permission 777, cho phép mọi user ghi-đọc-chạy file, các file này sẽ bị xóa sau khi khởi động lai máy
- date +%N trả về nanoseconds của thời điểm hiện tại.
%N     nanoseconds (000000000..999999999) - theo `man date`

hvn@u1210: ~/zzz/gentest () $ whatis touch
touch (1)            - change file timestamps
khi gán 1 tên file cho lệnh touch sẽ tạo ra 1 file trống với tên đã gán.

bạn có thể làm được nhiều điều thú vị khác với vòng lặp for của bash!

Xem thêm:
http://www.familug.org/2012/10/generate-random-data-part1.html

1 comment:

  1. UPDATE: với bash, có thể sinh dãy từ 1 đến 100 thay vì dùng lệnh seq như sau:
    for i in {1..100}; do ...;done

    ReplyDelete