병렬을 xargs 명령으로 변환

병렬을 xargs 명령으로 변환

이 명령을 병렬성을 사용하지 않는 명령으로 변환하려고 합니다.

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 --embedGNU Parallel을 쉘 스크립트에 포함시키는 데 관심이 있을 수 있습니다.

parallel --embed > newscript

그런 다음 끝을 편집하십시오 newscript.

newscript그런 다음 GNU Parallel이 설치되지 않은 컴퓨터에서 사용할 수 있습니다 .

--embed버전 20180322부터 사용 가능합니다.

답변2

xargsGNU와의 차이점은 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

관련 정보