저는 macOS 모하비를 사용하고 있습니다.
나는 내 사이트에 이미지를 추가할 때 이미지 이름을 지정하는 것을 싫어합니다(Jekyll, 관심 있는 분들을 위한 정보). 대신, 파일 내용을 기반으로 해시를 생성하고 해시의 첫 N자를 파일 이름으로 사용하는 것이 합리적인 전략이라고 생각합니다. 이 전략은 Amazon S3 및 CloudFront를 통해 웹 사이트를 제공할 때 자산 버전 관리에도 도움이 됩니다.
예
파일이 주어지면 somescreenshot.png
이 TBD 명령을 실행하고 결과는 이름이 변경된 파일입니다 8dbm2hz1.png
.
진전
나는 이에 대해 진전을 이루었지만 현재는 다단계 접근 방식입니다.
- 해시를 생성하고 처음 8자를 가져와 클립보드로 보냅니다.
shasum -a 256 -b inputfile.png | head -c8 | pbcopy
- 파일 이름을 바꿉니다.
mv inputfile.png [paste from #1]
이 명령을 효율적인 파이프라인 단일 단계 프로세스로 만들어야 합니다.
답변1
왜 사용하지 않습니까:
mv -- inputfile.png "$(shasum -a 256 -b inputfile.png | head -c8)"
$(shasum -a 256 -b inputfile.png | head -c8)
파일이 해시 값의 처음 8자의 출력으로 이동됩니다.
답변2
명령 대체를 사용하여 해시 값을 쉘 변수에 저장하십시오.
file=inputfile.png
h=$(shasum -a 256 -b "$file" | head -c8)
그런 다음 이를 사용하여 이름을 바꾸거나, 터미널로 인쇄하거나, 로 보내 pbcopy
거나, 다른 작업을 수행할 수 있습니다.
mv -- "$file" "$h"
echo "$h" | pbcopy
echo "'$file' renamed to '$h'"
파일 확장자를 유지하려면 다음과 같이 사용하십시오.
newname=$h.${file##*.}
mv -- "$file" "$newname"
( ${var##*.}
마지막 지점까지 모두 삭제하세요.)
답변3
이름을 바꾸고 싶다면모두파일을 만든 다음 xargs를 사용하세요. 이것은 GNU 도구의 진언입니다. 해당 옵션이 존재하는지 확인하려면 매뉴얼 페이지를 확인하세요.
printf "%s\0" * |
xargs -0 -I{} sh -c 'echo mv "$1" "$(shasum -a 256 -b "$1"| head -c8)"' sh {}
이는 널 바이트를 사용하여 파일 이름을 구분하므로 공백이 포함된 파일 이름을 안전하게 처리할 수 있습니다.
echo
실제로 파일을 이동하려면 명령을 제거해야 합니다.