이 명령을 병렬성을 사용하지 않는 명령으로 변환하려고 합니다.
find . -type f -iregex '.*.ts\|.*.js\|.*.tsx\|.*.jsx' | parallel 'touch {} -d "$(date -d \@$((0x$(md5sum {} | cut -b 1-7))))"'
내가 생각해낸 것이 작동하지 않습니다.
find . -type f -iregex '.*.ts\|.*.js\|.*.tsx\|.*.jsx' -print0 | xargs -0 md5sum | cut -b 1-7 | xargs -0 -I {} touch -d \@0x{}
내가 달성하고 싶은 것은 캐싱 목적으로 파일의 mtime을 md5sum으로 설정하는 것입니다.
답변1
스크립트를 변환하려는 이유를 작성하지 않았습니다. 아마도 스크립트가 GNU Parallel에 의존하지 않기를 원할 수도 있습니다.
이 경우 parallel --embed
GNU Parallel을 쉘 스크립트에 포함시키는 데 관심이 있을 수 있습니다.
parallel --embed > newscript
그런 다음 끝을 편집하십시오 newscript
.
newscript
그런 다음 GNU Parallel이 설치되지 않은 컴퓨터에서 사용할 수 있습니다 .
--embed
버전 20180322부터 사용 가능합니다.
답변2
xargs
GNU와의 차이점은 parallel
명령 구조를 근본적으로 변경해야 할 정도로 크지 않습니다. 이것
찾다.<검색 매개변수>-print 0 | xargs -0 -L 1 sh -c 'touch "$1" -d "$(date -d @$(( 0x$(md5sum "$1" | cut -b 1-7) )) )"' 쉿일하다.
또한 내 시스템에서는 사용할 필요가 없으므로 처리할 수도 있습니다
date -d
. touch
-d @number
찾다.<검색 매개변수>-print 0 | xargs -0 -L 1 sh -c 'touch "$1" -d "@$(( 0x$(md5sum "$1" | cut -b 1-7) ))"' sh