2012-04-21 42 views
5

tôi có một loạt các tập tin trong một thư mục tất cả các tên YYYY_MM_DDRun shell script cho mỗi tập tin trong thư mục

-rw-r--r-- 1 root root 480K Apr 21 13:17 2012_04_05 
-rw-r--r-- 1 root root 483K Apr 21 13:17 2012_04_06 
-rw-r--r-- 1 root root 484K Apr 21 13:17 2012_04_07 
-rw-r--r-- 1 root root 480K Apr 21 13:17 2012_04_08 
-rw-r--r-- 1 root root 344K Apr 21 13:17 2012_04_09 
-rw-r--r-- 1 root root 66K Apr 21 13:17 2012_04_10 
-rw-r--r-- 1 root root 461K Apr 21 13:17 2012_04_11 
-rw-r--r-- 1 root root 475K Apr 21 15:09 2012_04_17 
-rw-r--r-- 1 root root 480K Apr 21 15:10 2012_04_18 
-rw-r--r-- 1 root root 474K Apr 21 15:10 2012_04_19 
-rw-r--r-- 1 root root 474K Apr 21 15:10 2012_04_20 

Tôi có một kịch bản shell mà chấp nhận một tập tin như một paramater và tính toán số liệu dựa trên các dữ liệu trong tệp, tôi gọi tập lệnh như thế này

sh Calculate.sh MyFile 

Tôi muốn chạy tập lệnh shell này cho mọi tệp trong thư mục này.

Làm cách nào để tôi thực hiện việc này, xargs ??

+0

Lệnh 'find' có thể sẽ là một khởi đầu tốt. Dưới đây là một số tài nguyên về nó: http://www.grymoire.com/Unix/Find.html và http://mywiki.wooledge.org/UsingFind (phức tạp hơn nhiều, nhưng đáng xem ở một số điểm). – Telemachus

Trả lời

5

Bạn đã thử lệnh find có thực thi chưa?

mẫu của tôi sẽ vang các tập tin, nhưng bạn có thể gọi một kịch bản với tên tập tin như một tham số

find . -maxdepth 1 -type f -exec echo {} \; 
+0

Điều này thật tuyệt, nhưng làm thế nào tôi có thể chuyển các tập tin đó sang kịch bản Calculate.sh của tôi theo thứ tự ??? –

+2

Ok .. trong trường hợp đó bạn cần sắp xếp tất cả các tệp trước khi gọi tập lệnh. Hãy thử một cái gì đó như thế này 'tìm. -maxdepth 1-type f | sắp xếp | xargs -I '{}' Calculate.sh '{}' ' – MrJames

+0

Tôi hiểu lệnh tối đa xargs, tôi hiểu rằng sắp xếp đường ống dữ liệu vào xargs, chuyển đổi -I là gì và tại sao lại có hai '{}'? ? Cảm ơn nhiều. –

1

find . -maxdepth 1 -type f | xargs -n 1 -I % Calculate.sh %

3

Một đơn giản cho vòng lặp trong vỏ:

for file in *; do sh Calculate.sh "$file"; done 
+0

Điều này sẽ không tự chạy nếu Calculate.sh nằm trong cùng một thư mục? – ale10ander

+1

có thể. Để tránh điều đó, với bash, để lặp lại tất cả các tệp * không * có tên là Calculate.sh: 'shopt extglob nullglob; cho tệp trong! (Calculate.sh) ' –

1
./Calculate.sh 2012_04_{05..20} 
Các vấn đề liên quan