find + -printf + 정렬 충돌이 발생합니까?

find + -printf + 정렬 충돌이 발생합니까?

연결을 위해 인용된 FLAC 파일 이름의 정렬된 목록을 SoX에 전달해야 하지만 예상한 대로 정렬하는 데 문제가 있습니다.

내가 사용하는 경우:

find . -maxdepth 1 -type f -iname "*.flac" | sort

내가 얻은 것은 정확히 내가 기대했던 것입니다.

./01-Lordy.flac
./02-Both Sides Now.flac
./03-Solitary Man.flac
./04-Holly Holy.flac
./05-Cherry Cherry.flac
./06-Kentucky Woman.flac
./07-Sweet Caroline.flac
./08-Thank the Lord for the Nightime.flac
./09-And the Singer Sings His Song.flac
./10-Brother Loves Traveling Salvation Show.flac

그러나 나는 개행 없이 인용된 목록이 필요하기 때문에 내가 하고 있는 일에 그것을 실제로 사용할 수 없습니다. -printf가 나를 위해 이 작업을 수행할 수 있다는 것을 알고 있지만 시도하면 다음과 같습니다.

find . -maxdepth 1 -type f -iname "*.FlAc" -printf "\"%p\" " | sort

따옴표로 묶이고 공백으로 구분된 파일 이름 목록이 표시되지만(좋습니다!) 정렬되지 않습니다(나쁨!). 아니면 적어도 내가 예상한 대로 정렬되어 있지 않습니다.

"./08-Thank the Lord for the Nightime.flac" "./03-Solitary Man.flac" "./09-And the Singer Sings His Song.flac" "./05-Cherry Cherry.flac" "./06-Kentucky Woman.flac" "./10-Brother Loves Traveling Salvation Show.flac" "./07-Sweet Caroline.flac" "./02-Both Sides Now.flac" "./01-Lordy.flac" "./04-Holly Holy.flac"

아마도 더 낯선 것은 동일한 코드를 사용하지만 테스트를 위해 줄 바꿈을 추가하는 경우입니다.

find . -maxdepth 1 -type f -iname "*.FlAc" -printf "\"%p\" "\\n | sort

출력이 더 이상 필요한 것이 아니더라도 정렬은 계속 작동합니다.

"./01-Lordy.flac" 
"./02-Both Sides Now.flac" 
"./03-Solitary Man.flac" 
"./04-Holly Holy.flac" 
"./05-Cherry Cherry.flac" 
"./06-Kentucky Woman.flac" 
"./07-Sweet Caroline.flac" 
"./08-Thank the Lord for the Nightime.flac" 
"./09-And the Singer Sings His Song.flac" 
"./10-Brother Loves Traveling Salvation Show.flac"

이것은 Ubuntu 18.04.1에 있습니다.

답변1

sox파일이 모두 동일한 디렉토리에 있고 정렬된 파일 이름 목록을 bash 쉘에 전달하려면 다음을 직접 수행할 수 있습니다.

shopt -s nocaseglob
sox *.flac

nocaseglob옵션을 사용하면 foo.FLAC, foo.Flac, foo.flaC 등의 와일드카드를 선택할 수 있습니다. 와일드카드는 naked 처럼 알파벳순으로 정렬된 목록으로 확장됩니다 sort. 예를 들어 . 9-file.flac로 시작하는 파일 이름 뒤에 배치됩니다 8.

위의 bash-ism을 모든 쉘에서 작동하는 와일드카드로 단순화한 @mosvy에게 감사드립니다.

sox *.[Ff][Ll][Aa][Cc]

대괄호를 사용하면 "flac" 확장명에 대문자와 소문자를 조합하여 find ... -iname "*.FlAc"수행 중인 작업과 일치할 수 있습니다.

관련 정보