실제로 와일드카드나 셸 확장을 사용하지 않고 foo-* 폴더에 어떻게 들어갈 수 있나요?

실제로 와일드카드나 셸 확장을 사용하지 않고 foo-* 폴더에 어떻게 들어갈 수 있나요?

단편

발견된 첫 번째 디렉터리를 입력하는 명령을 찾고 있습니다 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 ';'

별표는 내부적으로 처리되며 findPOSIX를 준수한다고 생각합니다.

관련 정보