shuf 파일 --출력 파일: 제자리에서 셔플

shuf 파일 --출력 파일: 제자리에서 셔플

shuf명령에는 --output출력이 기록되는 위치(stdout에 기록하는 대신)를 지정하는 데 사용할 수 있는 플래그가 있습니다.

파일을 제자리에서 섞고 싶습니다. shuf file --output file출력 파일 이름 및 읽을 파일과 동일한 파일 이름을 사용하는 것이 안전합니까?

아니면 파일이 손상될까요? 플랫폼에 따라 다르나요? 작은 파일을 테스트해 보면 잘 작동하는 것 같지만 매뉴얼 페이지에는 이에 대한 내용이 나와 있지 않아 걱정해야 할지 모르겠습니다.

답변1

예 -문서에 따르면-파일을 섞는 것이 안전해야 합니다.

-o output-file
--output=output-file
출력 쓰기결과물 파일표준 출력 대신. shuf열기 전에 모든 입력을 읽으십시오.결과물 파일shuf -o F <F이므로 및 같은 명령을 사용하여 파일을 적절하게 섞을 수 있습니다 cat F | shuf -o F.

답변2

말씀하신 대로 작은 파일을 현장 테스트하면 원하는 대로 작동하는 것 같지만 안전을 원한다면 임시 파일에 쓴 다음 새 파일을 다음과 같이 바꾸는 것이 가장 좋습니다.

#!/bin/bash
scratch=$(mktemp)
trap 'rm -f "$scratch"' EXIT
if [[ -r "$1" ]]; then
    shuf "$1" --output "$scratch" && mv "$scratch" "$1"
fi

shuf_in_place위 스크립트는 예 를 들어 PATH.

관련 정보