디렉터리 및 하위 디렉터리에 있는 모든 파일의 표시 형식을 지정합니다.

디렉터리 및 하위 디렉터리에 있는 모든 파일의 표시 형식을 지정합니다.

크기가 30000~50000바이트 사이인 디렉터리 및 하위 디렉터리의 모든 파일을 표시하고 싶습니다.

내 파일을 다음과 같이 표시하고 싶습니다.

file1.xxx     md5sum     bytesize
file2.xxx     md5sum     bytesize

이것은 지금까지의 코드입니다(명령이어야 함).

find /mnt/analysis -size +30000c -size -50000c -exec md5sum {} \; -exec ls -l {} \; | awk '{print $1 $5 $9}'

산출:

2fc863d4e42fcced35ce17cdbb9cb623
-rwxrwxrwx33673/mnt/analysis/bla/twelve.png
a952105e64609de5149db2da08e3256c
-rwxrwxrwx41412/mnt/analysis/bla/thirteen.png

원하는 출력:

/mnt/analysis/bla/twelve.png 2fc863d4e42fcced35ce17cdbb9cb623 33673

/mnt/analysis/bla/thirteen.png a952105e64609de5149db2da08e3256c 41412

문제는 awk가 두 exec 파일 모두에서 수행된다는 것입니다. 그래서 권한도 거기에 적용됩니다.

답변1

먼저 md5sum을 받아주실 수 있나요?

find /mnt/analysis -size +30000c -size -50000c -type f | xargs stat -c"echo \$(md5sum %n) %s" | sh

또는 빼기 기호가 있는 경우

find /mnt/analysis -size +30000c -size -50000c -type f | xargs stat -c"echo %n \$(md5sum <%n) %s" | sh 

tr -d -(물론, 파일명이 없으면 추가하여 제거할 수 있습니다)

답변2

원하는 방식으로 형식을 다시 지정하기 위해 코드를 "find shell"로 묶겠습니다. 이는 세 가지 매개변수를 사용하는 단일 "printf" 명령으로 요약됩니다.

  1. 파일 이름
  2. 파일의 md5sum
  3. 파일 크기

find명령은 일치하는 각 파일 이름을 "find shell"에 인수( )로 전달하므로 $1각 printf 인수가 수행하는 작업은 다음과 같습니다.

find /mnt/analysis -size +30000c -size -50000c -type f -exec \
  sh -c 'printf "%s %s %d\n" \
         "$1" \
         "$(md5sum "$1" | awk "{print \$1}")" \
         "$(stat -c %s "$1")"' find-sh {} \;

md5sum(및 크기를 가져오는 호출)에서 의미 있는 결과를 얻기 -type f위해 원래 find 명령에 제한 사항을 추가했습니다 . stat읽기 쉽도록 "쉘 찾기" 명령을 여러 줄로 나누었지만 한 줄(긴)로 축소할 수도 있습니다. 추가적인 음모가 있습니다오직md5sum 명령의 md5sum 요소는 전체 "find shell"이 작은따옴표로 묶여 있기 때문에 awk 스크립트에 큰따옴표를 사용했습니다 . 이는 $awk가 .$1/some/file/here

답변3

find++ wc도구 와 결합 cut:

find /mnt/analysis -type f -size +30000c -size -50000c -exec \
bash -c 's=$(wc -c < "$1"); echo "$1 $(md5sum < "$1" | cut -d" " -f1) $s"' _ '{}' \;

관련 정보