Sắp xếp các tập tin theo thứ tự abc trước khi xử lý


12

Tôi sử dụng lệnh

find . -type f -exec sha256sum {} \; > sha256SumOutput

để băm mọi tập tin trong một hệ thống phân cấp thư mục. Thật không may, sha256sumkhông nhận được tên tập tin từ findtrong bảng chữ cái oder. Làm thế nào để sửa cái này?

Tôi muốn yêu cầu họ đặt hàng trước khi chúng được băm để chúng được băm theo thứ tự bảng chữ cái (điều này có lý do).


Tìm tệp, đường ống để sortsắp xếp danh sách và đường ống đến sha256sum
Sergiy Kolodyazhnyy

Sắp xếp chữ và số.
UTF-8

Câu trả lời:


16

Sử dụng một số đường ống và sort

find . -type f -print0 | sort -z | xargs -r0 sha256sum > sha256SumOutput

Giải trình

Từ man find

   -print0
        True; print the full file name on the standard output, followed
        by a null character (instead of the newline character that -print
        uses). This allows file names that contain newlines or other
        types of white space to be  correctly  interpreted by programs
        that process the find output.  This option corresponds to the -0
        option of xargs.

Từ man sort

   -z, --zero-terminated
        line delimiter is NUL, not newline

Từ man xargs

   -0   
        Input items are terminated by a null character instead of by
        whitespace, and the quotes and backslash are not special (every
        character is taken literally).  Disables the end of file string,
        which is treated like any  other  argument. Useful when input
        items might contain white space, quote marks, or backslashes.
        The GNU find -print0 option produces input suitable for this mode.

Thí dụ

% ls -laog
total 4288
drwxrwxr-x  2 4329472 Aug 17 08:20 .
drwx------ 57   20480 Aug 17 08:20 ..
-rw-rw-r--  1       0 Aug 17 08:15 a
-rw-rw-r--  1       0 Aug 17 08:15 a b
-rw-rw-r--  1       0 Aug 17 08:15 b
-rw-rw-r--  1       0 Aug 17 08:15 c

% find -type f -print0 | sort -z | xargs -r0 sha256sum                  
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  ./a
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  ./a b
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  ./b
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  ./c

Các giá trị trong cột đầu tiên giống nhau, vì các tệp không có bất kỳ nội dung nào trong thử nghiệm của tôi.


1
Ôi! Không kết thúc thay vì dòng mới
dùng3591723

1

Bạn sẽ có thể chỉ dẫn đầu ra của bạn từ findđến sort.


Vâng, nhưng sau đó không có -execchuyển đổi.
UTF-8

2
Tôi không tin findcó bất kỳ cách nào để sắp xếp thứ tự đầu ra, nhưng đường ống đến sortvà sau đó sử dụng xargssẽ cho đầu ra dự kiến. find . -type f | sort | xargs sha256sum. Mặc dù nó sẽ có vấn đề với các thư mục con ..
user3591723

Cách thức mạnh mẽ để đối phó với các thư mục phụ sẽ làfind . -type f | awk -F/ '{print $NF, $0}' | sort | awk '{print $2}' | xargs sha256sum
dùng3591723

Điều này in lỗi xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option sha256sum: invalid option -- 'l' Try 'sha256sum --help' for more information..
UTF-8

Tôi đoán là một trong những tệp của bạn có một trích dẫn trong tên
user3591723
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.