연결을 위해 인용된 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"
수행 중인 작업과 일치할 수 있습니다.