Bạn có thể làm toàn bộ như sau:
% sh -c `sed '[email protected]^.\(.*\)@md5sum \[email protected]' <./dirlist.txt`
Thực sự, tôi nghĩ bạn có thể làm điều này hiệu quả hơn nhiều, nhưng tôi không biết điều gì đang tạo ra danh sách của bạn. Nếu bạn có thể pipe
nó từ đó, hoặc chạy lệnh đó thông qua một heredoc
để giữ cho đầu ra của nó lành mạnh, bạn có thể làm toàn bộ công việc này được truyền trực tuyến, có thể.
EDIT:
OK, bạn nói đó là từ một "bãi ls." Vâng, đây là một chút linh hoạt:
% ls_dump() {
> sed '[email protected]^.\(.*\)[email protected] \[email protected]' <<_EOF_ | sh -s
>> `ls ${@}`
>> _EOF_
> }
% ls_dump -all -args -you /would/normally/give/ls
<desired output>
Tôi nghĩ điều này chỉ gọi tổng cộng một vỏ. Nó nên được khá tốt, nhưng theo ý kiến của tôi, find ... -exec md5sum {} ... +
có lẽ là an toàn hơn, nhanh hơn, và tất cả các bạn cần.
EDIT2:
OK, vì vậy bây giờ tôi sẽ thực sự trả lời câu hỏi. Để loại bỏ các ký tự đầu tiên của một chuỗi trong bất kỳ vỏ tương thích POSIX bạn chỉ cần nhìn vào việc mở rộng tham số như:
${string#?}
-Mike
Thực sự không cần đến [dấu chéo] (http://superuser.com/questions/306947/how-to-remove-first-dot). –