단편
발견된 첫 번째 디렉터리를 입력하는 명령을 찾고 있습니다 foo-something
. 예를 들면 다음과 같습니다.
cd foo-*
그러나 와일드카드(또는 기타 특수 쉘 문자)는 사용되지 않습니다.
아주 긴 이야기
원격 drush 빌드 스크립트의 일부로 이름을 변경할 수 있지만 공통 접두사가 있는 폴더에 들어가는 방법을 찾으려고 합니다. 같은 예: drush -y dl ads
또는 drush -y dl ads --dev
다운로드 ads-7.x-1.0-alpha1
또는 ads-7.x-1.x-dev
).
일을 더욱 까다롭게 만들기 위해 명령에는 다음을 포함할 수 없습니다.와일드카드또는이스케이프 세미콜론, drush는 많은 쉘 별칭을 이스케이프하기 때문입니다.
그래서 ls *
막히게 되고 ls '\''*'\'''
결국 잘못된 결과를 얻게 됩니다 Command ls '*' failed.
.
나도 사용해 보았지만 기본을 find
사용할 수 없습니다 .-exec
세미콜론을 이스케이프해야 합니다.'\''\;'\''
, drush는 ( ) 로 이중 이스케이프 처리합니다 .
foo-*
그래서 가능하다면 와일드카드(또는 다른 특수 문자, 매개변수 확장, 명령 대체, 산술 확장 등)를 사용하지 않고 폴더에 들어가고 싶습니다 .
나는 쉘 탈출의 논리가 다음과 같다고 생각합니다.여기escapeshellarg()
Linux에서와 동일한 방식으로 작동합니다 . 그것이 하는 일은 모든 매개변수를 이스케이프하는 것입니다.
답변1
드러시 녹에는 백틱과 수직 막대가 있습니까? 그렇지 않은 경우 다음을 사용할 수 있습니다.
cd `ls | grep foo- | head -n 1`
백틱이 작동하지 않지만 |
, $
및 (
작동 하는 경우 )
위의 내용을 다음과 같이 변경할 수 있습니다.
cd $(ls | grep foo- | head -n 1)
그러나 |
그래도 작동하지 않고 $
작동 (
한다면 )
다음을 수행할 수 있습니다.
cd $(myprog)
myprog
디렉토리 이름을 결정하기 위해 작성한 스크립트는 어디에 있습니까?
find
또한 - 를 사용 하여 을(를) 수행하는 데 어떻게 도움을 줄 수 있는지 이해가 안 되지만 cd
, -exec
을(를) 사용하여 끝낼 수 있나요 +
?
답변2
locate
다음과 같은 유틸리티를 사용해 볼 수도 있습니다 .
updatedb -o ~/tmp.db -l0 -U $PWD; cd $(locate -d ~/tmp.db -l 1 -b -r foo-)
보다 복잡한 정규식 패턴 검사의 경우 info locate
.
답변3
기반으로최종 요구 사항그럴 필요는 없습니다 cd
. 다음을 수행하면 됩니다.
find . -type d -name 'foo-*' -exec make -C {} ';'
그리고
find . -type d -name 'foo-*' -exec phing -f {}/build.xml ';'
별표는 내부적으로 처리되며 find
POSIX를 준수한다고 생각합니다.