문제의 원인은 여러 줄 바꿈이 포함된 파일 이름이었던 것으로 밝혀졌습니다. (어떻게 이런 일이 일어났는지는 확실하지 않습니다.)
find ~/x/y/ | shuf > ~/Desktop/z.txt
이 명령은 "z.txt" 파일의 일부 빈 줄을 제외하고 대부분 예상대로 작동합니다. 다음 단계는 최상위 파일을 선택하여 열어야 하는데, 빈 줄은 당연히 쓸모가 없기 때문에 이는 불편합니다. 왜 이런 일이 발생하는지, 그리고 이 문제에 대한 "표준" 솔루션(일부 옵션?)이 있거나 강력하고 간단한 솔루션(빈 줄을 제거하는 추가 명령?)이 있는지 궁금합니다.
답변1
출력 파일에 빈 줄이 나타나는 이유는 확실하지 않지만 파일에 쓰기 전에 빈 줄을 필터링해 볼 수 있습니다.
find ~/x/y/ | shuf | grep -v '^$' > ~/Desktop/z.txt
빈 줄의 소스를 추적하려면 find
개별적으로 실행해 보세요.
find ~/x/y/ > ~/Desktop/z.txt
빈 줄이 있나요 z.txt
? 그렇다면 아마도 find
.
개행 종결자 대신 0 종결자를 사용할 수 있습니다. 목록에서 첫 번째 항목을 선택할 때 첫 번째 문자부터 첫 번째 Null 문자까지의 텍스트를 사용하세요.
find ~/x/y/ -print0 | shuf -z > ~/Desktop/z.txt
답변2
shuf
빈 줄은 추가되지 않으므로 출력에서 나와야 합니다 find
. 이는 이름에 두 개의 연속된 개행 문자가 포함된 파일이 디렉토리에 있음을 나타냅니다. 그들이 명령을 사용하는 것을 볼 수 있습니다
find ~/x/y/ -name '*
*' -print -exec echo '========'
또는
find ~/x/y/ -name '*
*' -exec ls -q
명령을 사용하여 개행 문자가 포함된 파일 이름을 처리하려면 shuf
널 바이트를 구분 기호로 사용하십시오.
find ~/x/y/ -print0 | shuf -z