음악 트랙이 포함된 폴더가 있는데 Music
정리가 잘 되어 있지 않습니다. 따라서 특정 트랙을 찾으려면 일반적으로 다음을 입력합니다. 파일 이름에 포함될 것으로 예상되는 특정 키워드는 ls Music | grep <keyword>
어디에 있습니까? <keyword>
그런 다음 명령줄에서 내가 찾고 있는 파일 이름을 반환 <name>
하고 음악 파일을 열려면 vlc <name> &
.
내 질문은 이 모든 것을 하나의 작업으로 단순화하는 것이 가능합니까? 를 사용해 보았 ls Music | grep <keyword> | vlc
으나 실패했습니다. 어떻게 해야 하나요?
(보다 일반적으로 이러한 목적으로 파이프를 어떻게 사용합니까?)
답변1
xargs
이런 목적 으로 사용할 수 있습니다 . 표준 입력으로 파이프된 내용을 가져와 하위 명령에 대한 인수로 사용합니다. 따라서 귀하의 경우 다음과 같이 보일 수 있습니다.
ls Music | grep <keyword> | xargs vlc &
이제 이 명령 시퀀스, 특히 공백에 몇 가지 문제가 여전히 있을 수 있습니다. 기본적으로 xargs
입력은 공백으로 분할되므로 이름이 파일인 경우 5개의 별도 인수가 Artist Name - Track Name.mp3
, , , , 로 전송됩니다 . xargs
다행히도 이 문제를 해결할 수 있는 방법이 있습니다. 옵션을 사용하면 입력이 null을 사용하는 하위 명령에 대한 인수로 분할됩니다. 이 명령은 빈 구분 기호와 일치하는 파일 이름 작성을 지원하는 것으로 나타났습니다(다른 어떤 것보다 파일을 찾는 데 더 나은 도구임).vlc
Artist
Name
-
Track
Name.mp3
-0
xargs
\0
find
find
ls | grep
따라서 이것이 더 나은 파이프라인이 될 수 있습니다.
find Music -iname '*<keyword>*' -print0 | xargs -0 vlc &
답변2
xargs 사용법을 배우는 것이 유용하지만 여기에서특별한이 경우 하나의 글로브만 사용하는 것이 좋습니다.
vlc Music/*keyword* & ## will find all filenames containing the string 'keyword'
재귀를 원할 경우(예: 하위 디렉터리 검색) globstar 쉘 옵션을 사용할 수 있습니다.
shopt -s globstar
vlc Music/**/*keyword* &