이 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
.